`
newspringwork
  • 浏览: 98936 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论
阅读更多

昨天弄了个简单的注册,出现一个小问题,今天记录下来,下次再出现也好查找。

这个工程基于Struts2+Spring+Hibernate,问题如下:

 

1. 注册页面直接访问/user/regist.jsp,出现异常org.apache.jasper.JasperException:

 

org.apache.jasper.JasperException: The Struts dispatcher cannot be found.  
	This is usually caused by using Struts tags without the associated filter
	Struts tags are only usable when the request has passed through its servlet filter, 
	which initializes the Struts dispatcher needed for this tag.

提示很清楚,使用struts2标签没有使用相关的过滤器(^_^就是struts2的过滤器了)。web.xml配置Struts2的处理器可以处理.jsp的请求。配置方法就不多说了。

 

2.再次访问jsp,后台有struts日志打印出的警告信息No configuration found for the specified action:

No configuration found for the specified action: 'regist.do' in namespace: '/user'. Form action defaulting to 'action' attribute's literal value.

在命名空间/user下找不到regist.do。先贴出这段配置:

regist.jsp中form配置

 

<s:form action="regist.do" theme="simple" onsubmit="return checkRegist()">
		...
</s:form>

 

 struts2中action配置

 

<package name="user" namespace="/user" extends="struts-default">
	<action name="regist" method="regist" class="userAction">
		<result name="input">/user/regist.jsp</result>
		<result name="success">/result/message.jsp</result>
	</action>
</package>

 

 实际上是有配置regist这个action的,为什么找不到呢??

注意,是提示regist.do找不到,因为.do这个action确实是没有。struts标签会自动帮我们补全action的路径,并且加上struts2处理的结尾字符串(如".action"或".do"),所以去掉action中的结尾".do"。

再次请求jsp,OK!

 

3. 蛋疼的问题:一次验证失败后一直返回input配置的页面

action的regist方法

 

public String regist(){
		if(!userDao.isUserExist(user)){
			System.out.println("...注册用户:"+user);
			userDao.save(user);
			return SUCCESS;
		}else{
			System.out.println("用户已经存在:"+user);
			addFieldError("user.userName", getText("form.userNameExist"));
			//用户名已存在
			return INPUT;
		}
	}

 

 当注册同一个用户失败后,再次提交,发现总是返回配置的input页面,而且后台根本就没打印2种情况下应该打印的字符串,这是神马情况??

今天回来或立马开始查找问题原因:

首先,没有使用验证框架或者action中重写验证方法,那就不会是验证失败返回了!

偶然在网上看到一篇,情况一样,也有使用addFieldError()类似的方法,有网友回帖说要清了errors,为什么呢?虽然没有更多的说明,不过也提示了我。

因为spring给你的bean默认是singleton的,第一次出错了,再返回来的时候,发现仍然有errors,struts2于是就不假思索的直接返回给你input配置的页面了,然后呢就是不管你怎么弄都是返回input的页面。

配置action的scope为prototype。第一次注册重复的,再多次注册不同的全部OK!解决问题。

分享到:
评论
3 楼 newspringwork 2013-03-16  
1.JSP不通过struts2的filter是最好,但是“This is usually caused by using Struts tags without the associated filter. ”提示出错的原因就是使用struts标签但没有通过相关的过滤器处理。
2.spring+struts下面没用过action用注解配置。XML方式配置默认是单例的,至于注解方式默认的scope值因为没用过所以不知道,不过好像可以使用scope来指定作用域singlton。
2 楼 lg_asus 2013-03-15  
刚才没说清,spring管理Action,我的Action是用注解的,没在applicationContext.xml中进行设置。
1 楼 lg_asus 2013-03-15  
第1个问题,不建议jsp也走struts2 filter。

一直被第2个问题困扰,多谢。

第3个问题,spring管理Action默认不就是prototype? 我还想知道怎么产生singleton的Action Bean呢,呵呵,知道的话告诉我。

相关推荐

    struts2最全验证框架

    struts2最全验证框架...Struts2Validator Struts2 验证框架 Updated Jun 18, 2010 by cm2...@gmail.com Action 配置中一定要设置 input 返回页面 添加验证只要创建验证的...

    谈谈你对Struts的理解。

     4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml...

    Struts的html errors的用法

    当执行validate方法时,返回的ActionErrors检查内部是否存在元素,有则返回到原来的input指定的页面;否则继续前进,执行Action的execute方法!

    Sturts2详细信息

    客户端发出一个请求,服务器端 接收请求,如果该请求是一个以 .action 结尾请求,则将请求转发至相应的Action,进行数据类型转换,如果数据类型转换出错,则返回到 input 指定的结果页面,如果数据类型转换没有出错...

    dangdang和smartstruts2.rar

    executeResult="true":将action返回的页面整合到此页面 左中右依次如上述所写。 写main.xml,并把main.xml,包含在struts.xml &lt;struts&gt; &lt;result name="success"&gt;/main/book_list.jsp ...

    ThinkPHP v5.0.0 RC4.zip

    ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,...

    freemarker总结

    options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.1.1. DelegatingRequestProcessor 15.4.1.2. DelegatingActionProxy 15.4.2. ActionSupport 类 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.5.1.1. 将 ...

    jsp探针 ver0.1

    Class.forName("org.apache.struts.action.ActionServlet"); supportStruts = true; } catch (ClassNotFoundException ex) { } try { Class.forName("javax.naming.Name"); supportJNDI = true; } catch ...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

Global site tag (gtag.js) - Google Analytics