论坛首页 Java企业应用论坛

用struts验证器验证一个List

浏览 7952 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-09   最后修改:2008-11-09
下面是一个简单检验器例子.至于你的需求,你自已相应改动吧.

自定义校验器
struts2提供了校验器的接接口有:
引用
Validator,FieldValidator, ShortCircuitableValidator,
而 FieldValidatorSupport实现了它们,但FieldValidatorSupport是一个抽象类。


引用
自定义校验器,通常继承FieldValidatorSupport,然后覆盖validate方法。还要在classpath根目录下建一个validators.xml文件进行注册,再像预定义一样使用。


例:
自定义了一个限止输入”abc”的检验器;并使用它。
1 MyValidator.java-------自定义的检验器
package hi;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class MyValidator extends FieldValidatorSupport {

    public void validate(Object arg0) throws ValidationException {
         String fdName=getFieldName();
        
         String fdValue=(String) this.getFieldValue(fdName, arg0);
         if (fdName.equals("msg") & fdValue.equals("abc")){
             this.addFieldError(fdName, arg0);
         }
    }

}



2 validators.xml--------在src路径下自建的文件(编译后在classpath根路径下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
    <validator name="abc" class="hi.MyValidator"/>
    <!--当使用自定义检验器后,struts不再装默认的检验器注册表文件,
        因此这里要注册struts2已经写好的检验器 -->
     <validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
                
</validators>
注意:使用自写的检验器,系统自带的检验器需要在这里重新注册才能用。因为系统的检验器注册文件根本没加载。

3 hai.java---------action类,位于src/java/hai 下面
package hi;
import com.opensymphony.xwork2.ActionSupport;

public class Hai extends ActionSupport {
    private String msg; 
    //省略掉getter and setter
    @Override
    public String execute() throws Exception {  return "success"; } 
    
}


4 Hai-validation.xml--------检验器使用配置文件,与hai.java位于同一位置src/ava/hai。这是struts系统要求检验文件要与类文件在同一位置。
<?xml version="1.0" encoding="UTF-8"?>
<!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="msg">
        <field-validator type="abc">
            <message>不能输入abc</message>
        </field-validator>
        <field-validator type="requiredstring">
            <message>不能为空</message>
        </field-validator>
    </field>

</validators>


5 hai.jsp---------部份代码
 
       <s:form action="hai.action"  >
            <s:textfield name="msg" label="msg" />
            <s:submit />
        </s:form>


6 action配置。在struts.xml中进行。
        <action name="hai" class="hi.Hai" >
            <result name="success">/hai.jsp</result>
            <result name="input">/hai.jsp</result>
            <result name="err">/hai.jsp</result>
        </action>

7  web.xml配置略
0 请登录后投票
   发表时间:2008-11-10  
yunhaifeiwu ,jeff.chuh 两位仁兄,
提供的思想我已经认真阅读过了,首先感谢两位提供帮助,由于我初学struts不久仅仅出于初级阶段,struts2更是不了解,我会实验一下上面给出的例子。谢谢宁波的yunhaifeiwu (*^_^*)

来自沈阳的jeff.chuh在最后的回复中提到:
---------------------------------------------------------------------
我看配置文件了,是配置到validation.xml中的,
但是对于你的这种情况,配置到validation.xml的错误信息就没意义了。
话说回来,配置到validation.xml是由框架处理这个错误信息,
你认为框架会怎么处理呢,想要在画面显示这条信息的话,
我想框架一定是把这条信息以一个固定的key放到request中,
具体的存储方式可能是一个String,也可能是一个list需要你调查了。
如果是list的话你只要找到这个key是什么,然后在validateMyList中把拼好的错误信息加入到list中就可以了
List list = request.getAttribute("error_key")
list.add("your message")
但放到request的对象是String的话,
在validateMyList中调用request.setAttribute("error_key","your message")后,框架也许再次重新设值,那样就没意义了。
解决问题要靠自己
---------------------------------------------------------------------
,思想我是明白的,可是在实现上对于初学的我有些困难,比如如何得到那个error_key。现在在项目开发中我也不可能每天在这里死钻牛角尖,我已经用另一种形式实现了,可是仍旧需要您的解答。
0 请登录后投票
   发表时间:2009-01-02  
    既然可以实现一个 你就对每个字段进行校验啊!!!
我们都是这样做的。。
能达到你说的那种效果啊...
0 请登录后投票
论坛首页 Java企业应用版

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