论坛首页 Java企业应用论坛

关于struts做服务器端表单验证的问题

浏览 6028 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-09-30  
请问struts中的struts-config.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
	<data-sources />

	<form-beans>
		<form-bean name="sysuserForm" type="com.yourcompany.struts.form.SysuserForm" />
	</form-beans>

	<global-exceptions />
	<global-forwards />
	<action-mappings >
		<action
			attribute="sysuserForm"
			input="/sysuser/editsysuser.jsp"
			name="sysuserForm"
			path="/sysuser"
			scope="request"
			type="com.yourcompany.struts.action.SysuserAction"
			unknown="false"
			validate="true">
			<forward
				name="create"
				path="/sysuser/editsysuser.jsp"
				redirect="false"
				contextRelative="false" />
			<forward name="list" path="/sysuser/listsysuser.jsp"/>			
			<forward name="edit" path="/sysuser/editsysuser.jsp"/>
		</action>

	</action-mappings>

	<controller
		bufferSize="4096"
		debug="0"
		locale="false"
		nocache="false"
		inputForward="false" />
	<message-resources null="true" parameter="com.yourcompany.struts.ApplicationResources" />
	<plug-in className="com.DBStruts.util.InitHibernatePlugin" />
	
	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    	<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>
</struts-config>


在什么情况下,会发生错误而显示那个input="/sysuser/editsysuser.jsp"界面?因为我做了个struts服务器端验证,如果加上这个validate.xml
 
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">

<!--
    Validation Rules for the Struts Example Web Application

    $Id: validation.xml,v 1.2 2004/01/04 09:58:26 zhaoxin Exp $
-->

<form-validation>


    <!-- ========== Default Language Form Definitions ===================== -->
    <formset>

        <form name="sysuserForm">

            <field property="username"
                    depends="required, minlength,maxlength">
                <arg0   key="prompt.login"/>
                <arg1   key="${var:minlength}" name="minlength"
                   resource="false"/>
                <arg2   key="${var:maxlength}" name="maxlength"
                   resource="false"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>16</var-value>
                </var>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>3</var-value>
                </var>
            </field>

            <field property="userpassword"
                    depends="required, minlength,maxlength">
                <arg0   key="prompt.password"/>
                <arg1   key="${var:minlength}" name="minlength"
                   resource="false"/>
                <arg2   key="${var:maxlength}" name="maxlength"
                   resource="false"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>16</var-value>
                </var>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>3</var-value>
                </var>
            </field>

        </form>
    </formset>
</form-validation>
就只显示这个input="/sysuser/editsysuser.jsp"所指的界面,但我那个validate只是想验证包含表单的那页editsysuser.jsp,当前默认sysuser.do所指的那个页listsysuser.jsp里根本没有表单,而是显示记录列表.为什么也会出错呢? 当我输入sysuser.do时不显示listsysuser.jsp界面而显示editsysuser.jsp呢?
   发表时间:2004-10-01  
当前默认sysuser.do所指的那个页listsysuser.jsp

------------

这里不是这么理解的。
当你直接请求sysuser.do时,系统依据validate.xml中的内容进行验证, 发现你的username和userpassword没有输入, 验证出错, 转input对应的页面/sysuer/editsysuser.jsp。
这就是你的这种情况出现在原因
如果你想一开始直接进listsysuser界面,那么多配一个无验证的action的可以了
0 请登录后投票
   发表时间:2004-10-05  
你的validatoin.xml和action里的转发控制没有处理好,你再检查一下这些地方吧
0 请登录后投票
   发表时间:2004-10-10  
Validator框架不能用于验证标准的ActionForm类.如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.DynaValidatorForm和org.apache.struts.validator.ValidatorForm.

DynaValidatorForm 支持在动态ActionForm中使用Valiadator框架,ValidatorForm支持在标准的ActionForm中使用Validator框架.无论是对动态ActionForm还是标准ActionForm.配置的方式都是一样的.

DynaValidatorForm和ValidatorForm类都实现了validate()方法.所以你创建他们的子类时,不必在覆盖validate()方法
0 请登录后投票
   发表时间:2004-10-10  
所以你的&lt;form-bean&gt;的配置就有问题了.应该是
&lt;form-bean name="youForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;
&lt;form-property name="name" type="java.lang.String"/&gt;
&lt;form-property name="address" type="java.lang.String"/&gt;
.....
/*你的form里面需要验证的属性*/
&lt;/form-bean&gt;
大概这样子了.不明白的话在call我
0 请登录后投票
论坛首页 Java企业应用版

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