再有,测试时多次提交,提示 ××必须填写 。这些提示信息总是累加显示。如:一次提交:
username is required! 
password is required! 二次提交:
username is required! 
username is required! 
password is required! 
password is required! 有一遍就够了。请高手解答,不胜感激。

解决方案 »

  1.   

    struts.xml文件部分:<action name="user_*" method="{1}" class="userAction">        
                   
              <result name="success" type="tiles">ssh.main.ftl</result>
              <result name="find" type="tiles">ssh.find.ftl</result>
              <result name="input" type="tiles">ssh.main.ftl</result>               
            </action>
            
            <!--只需验证add方法,userAction映射到spring,ssh.main.ftl映射到 tiles, 页面用freeer显示-->
             <action name="user_add" method="add" class="userAction">        
                   
              <result name="success" type="tiles">ssh.main.ftl</result>
              <result name="input" type="tiles">ssh.main.ftl</result>               
            </action>tiles。xml文件<tiles-definitions>    <definition name="ssh.main.jsp" template="/main.jsp">
         <put-attribute name="someAttribute" value="some.value" />
            <put-attribute name="title" value="user infomation"/>
            <put-attribute name="header" value="/header.jsp"/>          
        <put-attribute name="menu" value="/menu.jsp" />
        <put-attribute name="footer" value="/footer.jsp" />
        <put-attribute name="body" value="/body.jsp" />        
        </definition>
        
        <definition name="ssh.main.ftl" template="/main.ftl">
         <put-attribute name="someAttribute" value="some.value" />
         <put-attribute name="title" value="user infomation"/>
         <put-attribute name="header" value="/header.ftl" />  
         <put-attribute name="menu" value="/menu.ftl" />
        <put-attribute name="footer" value="/footer.ftl" />
        <put-attribute name="body" value="/body.ftl" />                   
        </definition>
        
        <definition name="ssh.find.ftl" template="/userSearch.ftl">
         <put-attribute name="header" value="/userSearchHeader.ftl" />  
        <put-attribute name="body" value="/userSearchBody.ftl" />
        <put-attribute name="foo" value="/footer.ftl" />                   
        </definition></tiles-definitions> UserAction-add-validation.xml文件
    <!DOCTYPE validators PUBLIC
     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
      "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    <validators>
        <field name="user.username">
            <field-validator type="requiredstring" short-circuit="true">
                <message>username is required!</message>
            </field-validator>
        </field>
        <field name="user.password">
            <field-validator type="requiredstring" short-circuit="true">
                <message>password is required!</message>
            </field-validator>
        </field>
        
    </validators>
      

  2.   

    import java.util.List;
    import org.apache.log4j.Logger;
    import org.apache.struts2.interceptor.validation.SkipValidation;import cn.com.ctdos.domain.User;
    import cn.com.ctdos.domain.helper.UserHelper;
    import cn.com.ctdos.service.ServiceFacade;
    import com.opensymphony.xwork2.ActionSupport;
    public class UserAction extends ActionSupport {
    Logger log = Logger.getLogger(UserAction.class);
    private static final String _SHORT_NAME_Of_POJO = "User";
    private static final String _LONG_NAME_Of_POJO = "cn.com.ctdos.domain.User";
    private static final String _FIND = "find";
    ServiceFacade<User> serviceFacade = null;
    List<User> liUser;
    User user = null;
    UserHelper userHelper;
    @SkipValidation
    public String index(){
    find();
    return SUCCESS;
    }
    @SkipValidation
    public String indexFTL(){
    find();
    return "input";
    }
    @SkipValidation
    public String findIndex(){
    return _FIND;
    }
    //---------------------------------
             //就是要调用它,别的我什么也没做。
    public String add(){
    log.info("add start");
    serviceFacade.saveUser(user);
    log.info("add end");
    return find();
    }
    //---------------------------------
    @SkipValidation
    public String find(){
    setLiUser(serviceFacade.findUser(_SHORT_NAME_Of_POJO));
    return SUCCESS;
    }
    @SkipValidation
    public String findUserByID(){
    log.info("-------------> " + user.getId());
    setUser(serviceFacade.findUserById(_LONG_NAME_Of_POJO, user.getId()));

    return SUCCESS;
    }
    @SkipValidation
    public String delete(){
    // log.info(getId());
    serviceFacade.delUser(user);
    return find();
    }
    @SkipValidation
    public String update(){
    User userupdate = serviceFacade.findUserById(_LONG_NAME_Of_POJO, user.getId());
    userupdate.setId(user.getId());
    userupdate.setUsername(user.getUsername());
    userupdate.setPassword(user.getPassword());
    serviceFacade.updateUser(userupdate);
    return find();
    }
    @SkipValidation
    public String findByProperty(){
    String queryCondition = userHelper.getQueryCondition();
    String queryString = "from " + _SHORT_NAME_Of_POJO 
       + " where username like '%"+queryCondition+"%'";
    setLiUser(serviceFacade.findByProperty(queryString));
    return _FIND;
    }

    public ServiceFacade<User> getServiceFacade() {
    return serviceFacade;
    } public void setServiceFacade(ServiceFacade<User> serviceFacade) {
    this.serviceFacade = serviceFacade;
    } public List<User> getLiUser() {
    return liUser;
    } public void setLiUser(List<User> liUser) {
    this.liUser = liUser;
    } public User getUser() {
    return user;
    } public void setUser(User user) {
    this.user = user;
    } public UserHelper getUserHelper() {
    return userHelper;
    } public void setUserHelper(UserHelper userHelper) {
    this.userHelper = userHelper;
    }



    }ftl 里获得error
    <@s.fielderror/>
      

  3.   

    msn: [email protected] 谢谢
      

  4.   

    按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
      

  5.   

    struts-config.xml里面action作用域设置成request!再看!他默认的是session!如果是session的话他就不会重新创建
    ActionForm所以得不到!
      

  6.   

    有人遇到过类似的问题吗?我单独建了一个工程,是没有问题的,是不是validation同什么冲突
      

  7.   

    好像是第一次的validation中的内容没有清,然后第二次调用时又输出了
    要不你追一下,看看在哪产生的问题
      

  8.   

    validation中的内容没有清,怎么清啊?我不知怎么追啊
      

  9.   

    当然和cookie没有关系了,应该是每次提交后,返回结果,但是没有进行一次http操作,也就是说没有刷新页面或者就是页面的事了,这种问题和后台没有关系,根本就不走Action
      

  10.   

    第一次提交是可以的,能调用acton,并提示一些项必输,但以后就不行了,我觉得跟我的UI没什么关系,
    很可能是jar冲突,但人仔细查检了。
    哎,期待!!!com.opensymphony.xwork2.validator.ActionValidatorManagerFactory  - <Detected AnnotationActionValidatorManager, initializing it...>其中有这么一句话。咋回事呢?
      

  11.   

    你检验用户输入是不是用validator插件,如果是,就检查一下页面和validate.xml
    和后台没有关系
      

  12.   

    终于找到原因了,是因为这个
    <constant name="struts.objectFactory" value="spring" /><action name="UserAction_userAdd" method="add" class="userAction"> 换成这个<action name="UserAction_userAdd" method="add" class="cn.com.ctdos.web.action.UserAction">就没问题了,原因正在查找中,为什么.憋了我好长时间
      

  13.   

    <bean id="userAction" class="cn.com.ctdos.web.action.UserAction" scope="prototype">
    要加上他scope="prototype" ,我记得默认不是单实例啊谢了,爱
      

  14.   

    那位有关于struts2.0的服务验证源码了  谢谢了
      

  15.   

    把action 设置scope="prototype"在struts.xml里