论坛首页 Java企业应用论坛

Struts2 Action方法执行两次的问题?model-driven奇怪现象

浏览 16669 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-10  
项目采用的支撑框架Struts2.09,Spring2 Hibernate3.2.在项目开发过程中.采用Struts2.09开发中采用model-driven的方式来获取对象产生了一些奇怪的问题.第一个问题:
我在action中如果只配置:
<interceptor-ref name="model-driven"/>
例如在我的UserAction就获取不到User对象.user.jsp页面我是按照model-driven的写法如:
user.userName user.userPasswd用的也是strtus2的标签.在Action中同样写了对应的
private User user = new User();
private User getUser(){...}
private void setUser(User user){...}

奇怪的是获取不了页面传来的user对象属性,如果用getParemeter("user.userName")是可以获得值的.
但是在Action中再增加其它的拦截器如:
<interceptor-ref name="validationWorkflowStack" />
或者干脆增加:
<interceptor-ref name="defaultStack"/>
这样Action中的User对象就能顺利获取页面传来的属性值了.
	<package name="userManger" extends="struts-default">
         <action name="albumAction" class="com.xx.struts.action.UserAction">
		      	<result name="success" type="dispatcher">
		      	 	<param name="location">/userinfo.jsp</param>
		      	</result>
		<interceptor-ref name="model-driven"/>
		<interceptor-ref name="validationWorkflowStack" />
	  	 </action>
	</package>
但是这样又出现一个奇怪的问题.就是我的Action中的代码会多执行一次.例如
我的Action中默认的execute()方法中有一段:
user.setCreateTime(new Date())
user.setUserStatus(Constans.IS_LEGALITY);
.....
UserManager.save(user);

这段在execute()方法中的代码会在第一次保存完之后又返回重新执行一次.
这个时候程序当然就会报异常了,有些需要从页面上获得的属性在数据库中是必填的就会报值不能空的异常了.但是事实上是通过Debug可以发现程序的execute的方法重复执行了一次.且控制台也打印出两条insert语句了.刚开始我还以为是hibernate invert配置问题.后来通过debug排除这种问题.不知道这种原因有谁有较深入的了解.或者也同样出现个,请指教一下,谢谢
   发表时间:2007-09-10  
现在最让人不得及解的是Action中的方法体的内容会多执行一次.请问大家这主要是由什么原因产生的?排除js提交button submit的可能性,这个我检查过.不会是由这么低级的问题引起的
0 请登录后投票
   发表时间:2007-09-10  
要看你的struts.xml是怎么配置的

一般来说,使用默认的配置 就可以了,不需要特别的配置
0 请登录后投票
   发表时间:2007-09-10  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- Constants -->
    <constant name="struts.devMode" value="false"/>
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <constant name="struts.action.extension" value="shtml"/>
    <constant name="struts.objectFactory" value="spring"/>
    <constant name="struts.custom.i18n.resources" value="ApplicationResources,errors"/>
    <constant name="struts.multipart.maxSize" value="5097152"/>

    <!-- Include Struts defaults -->
    <include file="struts-default.xml"/>
    <include file="struts-space.xml"/>

    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <interceptors>
            <!-- Copied from struts-default.xml and changed validation exclude methods -->
            <interceptor-stack name="defaultStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servlet-config"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="chain"/>
                <interceptor-ref name="debugging"/>
                <interceptor-ref name="profiling"/>
                <interceptor-ref name="scoped-model-driven"/>
                <interceptor-ref name="model-driven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="static-params"/>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">cancel,execute,delete,edit,list</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
            </interceptor-stack>
            <interceptor-stack name="fileUploadStack">
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
        </interceptors>

     </package>
</struts>


这是我的struts2的struts2.xml配置文件
user的配置struts2-space.xml配置文件为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

	<package name="space" extends="default" namespace="/space">
         <action name="albumAction" class="com.xx.action.UserAction">
		    <interceptor-ref name="modelDriven"/>
		    <interceptor-ref name="validationWorkflowStack"/>
		      	<result name="success" type="dispatcher">
		      	 	<param name="location">/userinfo.jsp</param>
		      	</result>

	  	 </action>
      </package>
</struts>
现在的问题就是:Action中的方法体中的内容会执行两次.配置文件改了好几种了,还是这种问题.为什么会执行两次呢?
0 请登录后投票
   发表时间:2007-12-16  
我也有这样的问题,郁闷了好些天了!
0 请登录后投票
   发表时间:2007-12-16  
估计是版本的问题?
0 请登录后投票
   发表时间:2008-01-01  
我也遇多次执行的问题,不过没有用Model-driven,我的是这样,在Action提供一个User,提交form之后就执行两次setUest,而且只有username有值,password为空,不知道什么原因?
0 请登录后投票
   发表时间:2008-04-02  
我也遇到过,我的情况是jsp页面用 a href 提交给action处理,结果action方法被执行两次,jsp页面换成提交表单给action处理,就被执行一次,郁闷中
0 请登录后投票
   发表时间:2008-04-23  
我也有这样的问题,action方法被执行两次,有哪位大侠 知道原因呢?
0 请登录后投票
   发表时间:2008-04-24  
我知道啊,你是不是用js脚本提交的?可是你的图片按钮还提交了一次,所以重复了。
structs2 怎么可能有这么大的bug呢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics