100分征回答,解决问题全给!关于struts1.2之后表单提交验证的问题,请指教!!
struts1.1表单的提交验证用的是actionForm 中的validator方法
但是struts1.2之后的版本好像不需要在actionForm中再写这个方法了
只需要在struts-config.xml和validation.xml中配置验证的条件好像就可以了
我是看的struts1.2.7中的validator中的例子,但是没有看明白其中的流程
就差一步!!
请大虾出来解释一下!
小弟不胜感激!!
问题点数:100、回复次数:9Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-06-04 12:59:05 得分 20
楼主还没有理解
struts1.2之后并没有摈弃actionForm 中的validate方法,我们照样可以使用
你说的validation.xml和validate-rules.xml是validate框架,它的验证原理是生成js代码,其实还是客户端验证。
而ActionForm里面的validate方法是服务器端验证。
他们不矛盾的,我们一般结合起来使用他们。Top
2 楼HellBoy09()回复于 2005-06-04 14:13:32 得分 0
我现在看得是struts1.2.7 中的那个validator的第一个例子
链接是http://127.0.0.1/struts-examples/validator/registration.do
我看了他的源码,发现LoginActionForm里面并没有使用validator方法
并且也没有使用js客户端验证,因为在registration.jsp下没有使用<html:javascript 。。。
这个标记,并且验证后的效果是在网页显示,并不是弹出对话框,所以必然是服务器端验证
问题就是他没有写validator方法如何进行的验证,难道只是配置了struts-config.xml和validation.xml,但是我这样试了,行不通,总是不经过验证直接就跳转至欢迎页面!
这就是我心中的疑惑,他如何生效的??
请指教!!谢谢!
Top
3 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-06-04 14:28:47 得分 20
确实只要在validation.xml里面配置一下对具体的Form的验证规则就可以了
然后页面里面加上这个
<html:form action="/login" method="post" focus="loginname" onsubmit="return validateLoginForm(this);">
这个是我自己写的,LoginForm是在struts-config.xml里面配置的FormBean的名字
Top
4 楼HellBoy09()回复于 2005-06-04 14:49:29 得分 0
还是通过不了,下面是我的代码,请看一下!
login.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html>
<head>
<title>mvc test</title>
</head>
<body>
<html:errors/>
<html:form action="/login" method="post" focus="userName" onsubmit="return validateloginActionForm(this);">
<table width="43%" border=1 align="center" cellpadding="0" cellspacing="0">
<tr>
<th width="49%" align="right">userName:</th>
<td width="51%" align="left">
<html:text property="userName" size="20" maxlength="20"/>
</td>
</tr>
<tr>
<th align="right">password:</th>
<td align="left">
<html:password property="password" size="20" maxlength="20"/>
</td>
</tr>
<tr>
<td align="right">
<html:submit/>
</td>
</tr>
</table>
</html:form>
</body>
</html:html>
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginActionForm" type="struts.LoginActionForm" />
</form-beans>
<action-mappings>
<action input="input" name="loginActionForm" path="/login" scope="session" type="struts.LoginAction" validate="true">
<forward name="input" path="/login.jsp" />
<forward name="success" path="/hello.jsp">
</forward>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
<set-property property="stopOnFirstError" value="true"/>
</plug-in>
</struts-config>
validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="loginAtionForm">
<field property="userName" depends="required">
<arg0 key="app.userName"/>
</field>
<field property="password" depends="required">
<arg0 key="app.password"/>
</field>
</form>
</formset>
</form-validation>
LoginActionForm.java
package struts;
import org.apache.struts.validator.ValidatorForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
public class LoginActionForm
extends ValidatorForm {
private String password;
private String userName;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
}
LoginAction.java
package struts;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.Action;
import javax.servlet.http.HttpSession;
public class LoginAction
extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse servletResponse) {
LoginActionForm loginActionForm = (LoginActionForm) actionForm;
loginActionForm.setUserName("loginName");
loginActionForm.setPassword("password");
return actionMapping.findForward("success");
}
}
请指教,多谢!!!Top
5 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-06-04 15:05:28 得分 60
loginActionForm
<formset>
<form name="loginAtionForm">
<field property="userName" depends="required">
不知道是不是你的代码贴错了,上面的form名字要统一
其他我也没看出问题:(
当然我的页面里面加了
<html:javascript formName="LoginForm" />Top
6 楼HellBoy09()回复于 2005-06-04 15:28:01 得分 0
什么地方不一致呀!!??Top
7 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-06-04 15:47:16 得分 0
<form name="loginAtionForm">
~~~~~~~~Top
8 楼HellBoy09()回复于 2005-06-04 16:18:20 得分 0
不过还是没有搞明白struts1.2.7里面那个例子是怎么回事!
唉!
Top
9 楼HellBoy09()回复于 2005-06-04 16:20:20 得分 0
我在struts-config.xml和validation.xml
写的都是loginActionForm
jsp页面里面也是loginActionForm
哪里还不一致呀?!!
Top




