`
newspringwork
  • 浏览: 101686 次
  • 性别: 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的页面跳转是通过Action类的方法返回结果代码,结合struts.xml配置文件中的结果配置来实现的。这种机制使得页面跳转变得简单而灵活,同时也方便了业务逻辑和视图的分离,是Struts2框架的一大特点。...

    json struts2 ajax文件上传 input type=file,选择相同文件也提交 附带类库

    在MyEclipse中,你可以创建一个Struts2项目,导入所需的依赖库,然后按照上述步骤配置Action、配置文件和前端页面。在测试过程中,记得设置好服务器的临时目录,以便Struts2可以临时存储上传的文件。 总的来说,这...

    struts2项目实例

    每个Action执行后,会返回一个结果代码,这个代码对应一个配置在struts.xml配置文件中的结果页面。例如,`AddAction`成功执行后,可能返回一个"success"的结果,这会重定向到显示添加成功信息的页面。 Struts2的...

    Struts2实现的注册

    在Struts2的配置文件(struts.xml)中,你需要定义Action的配置,包括Action类名、方法名、结果页面等,这样Struts2才能正确地处理用户的请求和响应。 最后,别忘了在web.xml中配置Struts2的前端控制器...

    Struts2经典小例题

    Struts2配置文件(struts.xml)会定义这些结果代码对应的视图页面,比如,"success"可以对应登录成功的页面,"error"则对应登录失败的提示页面。 接着,展示登录信息和登录名。登录成功后,我们通常会将用户信息...

    struts2文件上传下载源代码

    在Struts2中,这通常通过表单实现,表单包含一个`&lt;input type="file"&gt;`元素,用户可以选择本地文件。Struts2的Action类会接收这个文件,并使用`Commons FileUpload`库来处理文件内容。这个库处理文件分割、内存限制...

    struts2登录小例子

    为了实现页面跳转,我们需要在Struts2的配置文件(struts.xml)中定义Action的配置。在这里,我们需要指定Action的类名、方法名以及对应的Result。例如: ```xml &lt;result name="success"&gt;/success.jsp ...

    struts2实现登陆

    Struts2会根据返回值决定跳转到哪个页面。 接下来,配置Struts2的配置文件`struts.xml`,它指定了Action类与URL的映射,以及Action的执行结果。 ```xml &lt;struts&gt; ...

    Struts2之struts2文件上传详解案例struts011

    在处理完文件后,返回相应的结果名称(如"success"或"input"),Struts2会根据结果名称跳转到相应的JSP页面。 在成功页面(如success.jsp)中,可以显示文件上传的结果,比如文件名、大小等信息。 在处理文件上传...

    Struts2文件上传带进度条页面无刷新

    "Struts2文件上传带进度条页面无刷新"的实现涉及多个技术点,包括Struts2的文件上传插件、AJAX异步通信以及前端进度条展示。 首先,Struts2的文件上传依赖于`struts2-upload-plugin`。这个插件扩展了Struts2的核心...

    struts2实现用户登录

    4. **配置Struts2配置文件**:在struts.xml文件中,为`UserLoginAction`定义一个Action配置,包括结果类型和对应的视图页面。比如: ```xml &lt;result name="success"&gt;/success.jsp &lt;result name="input"&gt;/login....

    struts2入门(传参)

    Struts2会根据返回的结果名来决定跳转到哪个页面。 7. **结果页面**: 成功页面(success.jsp)和错误页面(error.jsp)将显示相应的信息,提示用户登录状态。 通过以上步骤,我们就可以实现一个基本的Struts2...

    struts2 实现登录实例

    1. `struts.xml`:这是Struts2的核心配置文件,用于定义Action、结果页面、拦截器等。例如,我们可以配置一个登录Action如下: ```xml &lt;package name="default" namespace="/" extends="struts-default"&gt; ...

    Struts2知识点总结

    在Struts2中,开发者可以利用Action类来处理用户的请求,这些Action类封装了业务逻辑,并且能够返回一个字符串类型的结果,该结果名称与struts.xml文件中定义的result相对应。struts.xml是一个配置文件,用于定义...

    struts2登录程序源码

    对于登录,可能会有成功和失败两种结果,分别跳转到不同的页面,如`success`跳转到欢迎页,`input`表示验证失败,返回登录页面。 6. **Session管理**: 登录成功后,通常会将用户信息保存在Session中,以便在后续...

    Struts2文件上传进度条

    - Struts2的必要jar包:如struts2-core、struts2-convention、struts2-json-plugin等,用于构建和运行Struts2应用。 - 自定义拦截器的Java源代码:实现了文件上传进度计算的逻辑。 - 示例Action的Java源代码:处理...

    struts2 上传图片显示

    总的来说,使用Struts2上传图片并显示缩略图涉及多个步骤:配置Struts2 Action,处理文件上传,生成缩略图,以及在页面上展示图片。这个过程需要对Struts2框架、文件I/O、图片处理以及Web安全有深入理解。通过实践,...

    Struts2小例子

    在Struts2项目中,我们通常需要一个`struts.xml`配置文件,这是框架的核心配置文件,用来定义Action类、结果页面和拦截器。在这个小例子中,可能有如下配置: ```xml ...

Global site tag (gtag.js) - Google Analytics