在资源配置文件中配置了如下: user.required={0} is required 使用struts2的验证框架配置文件 <field name="name">                                     <!-- 该表单域必须填写 -->                                   <field-validator type="requiredstring">                                         <!-- 如果校验失败,显示user.required对应的信息 --> 
                                      <message key="user.required" >                            
                                      </message>                                         </field-validator> </field> 请问一下如何在 <message key="user.required" > </message>中为user.required={0} is required传递参数? 试着添加  <message key="user.required" arg0="123"> </message>又提示Attribute "arg0" must be declared for element type "message". 请帮忙解答,非常感谢 

解决方案 »

  1.   

    是不是没有添加在错误集合里面  例子如下: 
    1: 
      写在actionfrom  里面的前端验证 
        public ActionErrors validate(ActionMapping mapping, 
    HttpServletRequest request) 

    ActionErrors errors=new ActionErrors(); 
    if(name==null ||"".equals(name)) 

      ActionMessage message=new ActionMessage("intput.count.null","name"); 
      errors.add("name",message); 

    if(name.length() <=6 ||name.length()>=10) 

      ActionMessage message=new ActionMessage("input.count.length","6","10"); 
      errors.add("name",message); 

    if(null==password||"".equals(password)) 

      ActionMessage message=new ActionMessage("input.password","password"); 
      errors.add("password",message); 

    return errors; 

    2: 在action 里面的逻辑验证 
        public ActionForward execute(ActionMapping mapping, ActionForm form, 
    HttpServletRequest request, HttpServletResponse response) { 
    LoginForm loginForm = (LoginForm) form; 
    String name=loginForm.getName(); 
    if("luoluoluo".equals(name)) 

    ActionMessages messages=new ActionMessages(); 
    ActionMessage actionMessage=new ActionMessage("input.jingzhi",name); 
    messages.add("qingzhi", actionMessage); 
    this.saveErrors(request, messages);  //保存在errors集合里面 
    return mapping.getInputForward(); 

    return null; 

    3:  在jsp页面显示 
        <html:form action="login"> 
                <!--arg0  表示输入参数  bundle 表示指定的资源文件 --> 
    <bean:message key="into.input" arg0="name"/> 
      <html:text property="name" /> 
      <html:errors property="name"  bundle="warn"/> <br/>   <bean:message key="into.input" arg0="pass" /> 
                  <html:password property="password"/> 
      <html:errors property="password"  bundle="warn"/> 
      <html:errors property="qingzhi"  bundle="warn"/> <br/> 
                  
      <html:submit/> 
      <html:cancel/> 
    </html:form>
      

  2.   

    二楼说的是Strut1
    楼主首先看一下你的properties文件中有没有,这个key值,注意如果key值对应的是中文汉字,应该转换成ASCII码。
    如果有这个key值的话,你看看你的Action中是否设置了这个key值
    例子:
    this.addFieldError("username", getText("user.required", "error"));
      

  3.   


    这个是采用继承ActionSupport的方法,而我想用的是使用Struts 2的校验框架,增加一个校验配置文件,校验配置文件通过使用Struts 2已有的校验器,完成对表单域的校验。不过还是要谢谢你
      

  4.   

    <message key="user.required" > 改为 <s:property value="getText('user.required','arg0')" />
    或者  <s:property value="%{getText('user.required',{getArg0()})}" />这里借用了 OGNL 表达式, 直接调用了 ValueStack 中最后一个对象;(使用 <s:debug/> 查看), 
    具体可以查看 TextProvider 的 JavaDoc
      

  5.   


    <message key="user.required" >是在配置文件中的,而<s:property value="getText('user.required','arg0')" />是在jsp页面中的。我想在配置文件中为
    user.required={0} is required 传递参数
      

  6.   

    这个还真不知道:
      dtd文件:
         <!ELEMENT message (#PCDATA)>
        <!ATTLIST message
            key CDATA #IMPLIED
        >
      看不出什么地方可以放message的参数。知道的说一声
      

  7.   

    google了一下,貌似是这样的,LZ可以考虑一下。struts2的配置文件验证方式(xml)只能对一些简单的画面属性进行验证(诸如 必须项,输入范围等)。因此,像你所说的user.required={0} is required就只能把message写死了(既然是user.required,当然message是user is required了)。如果是验证范围的话,下面的可以参考一下:
      XML:
         <field name="age">
           <field-validator type="int">
             <param name="min">1</param>
             <param name="max">100</param>
             <message key="error.age.size"></message>
           </field-validator>
         </field>
      Properties:
         error.age.size=年龄只能在${min}~${max}之间也就是说验证xml会把参数传递到对应的资源文件中。
      

  8.   


    非常感谢你的回答!不过我还是想知道怎么传递参数进入。
    假如,在资源配置文件中配置了如下: 
    required={0} is required 这里只是required,
    我想传入参数,可以传入参数user或者password 那么就可以变成
    user is required 或者 password is required 
    那么在资源配置文件中就只是写required={0} is required就够了
    而不用为每一个都写
    user.required = user is required 
    password.required  = passwoord is required 
      

  9.   

    1>.属性定义:
    Action中属性name1和name2,并有get/set方法。2>.校验文件:
    <field name="name1">
    <field-validator type="requiredstring">
    <message key="ssi001.required"></message>
    </field-validator>
    </field>
    <field name="name2">
    <field-validator type="requiredstring">
    <message key="ssi001.required"></message>
    </field-validator>
    </field>3>.资源文件:
    name1 = 参数名称1:
    name2 = 参数名称2:
    ssi001.required = ${getText(fieldName)}必须输入!
      

  10.   

    意思就是不能直接传
    可以参照以下 redlotus_lyn 的方法
      

  11.   

    经测试(struts2.3.1.2),对于楼主的问题,有两种解决方式:
    1、使用OGNL表达式:
    password.length=Password Length Must Between {0} and {1}!
    <field name="password">
    <field-validator type="stringlength">
    <param name="minLength">2</param>
    <param name="maxLength">6</param>
    <message><![CDATA[${getText("password.length",{"%{minLength}", "%{maxLength}"})}]]></message>
    </field-validator>
    </field>2、在资源文件中指明参数名:
    password.length=Password Length Must Between {0} and {1}!
    <field name="password">
    <field-validator type="stringlength">
    <param name="minLength">2</param>
    <param name="maxLength">6</param>
    <message key="password.length"/>
    </field-validator>
    </field>
      

  12.   

    经测试(struts2.3.1.2),对于楼主的问题,有两种解决方式:
    1、使用OGNL表达式:
    password.length=Password Length Must Between {0} and {1}!
    <field name="password">
    <field-validator type="stringlength">
    <param name="minLength">2</param>
    <param name="maxLength">6</param>
    <message><![CDATA[${getText("password.length",{"%{minLength}", "%{maxLength}"})}]]></message>
    </field-validator>
    </field>2、在资源文件中指明参数名:
    password.length=Password Length Must Between ${minLength} and ${maxLength}!
    <field name="password">
    <field-validator type="stringlength">
    <param name="minLength">2</param>
    <param name="maxLength">6</param>
    <message key="password.length"/>
    </field-validator>
    </field>