论坛首页 Java企业应用论坛

『提问』提问:关于在WEBWORK2中做验证的问题!

浏览 4730 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-15  
软件环境:
wsad 5.1.2
webwork2包,2.1.7包
windows xp
配置文件:
输入的jsp文件

index.jsp

<%@ taglib prefix="ww" uri="webwork"%>
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB18030"
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=GB18030">
<META http-equiv="Content-Style-Type" content="text/css">

<STYLE type="text/css">
.errorMessage {
color: red;
}
</STYLE>
<TITLE>index.jsp</TITLE>
</HEAD>
<BODY>

<p align="center">登录</p>
<ww:form name="'login'" action="'login'" method="'post'">
<ww:textfield label="'用户名'" name="'model.username'" />
<ww:password label="'密 码'" name="'model.password'" />
<ww:submit value="'提交'"/>
</ww:form>

</BODY>
</HTML>

---------
Action类
package test;

import java.util.Map;

import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ModelDriven;

public class LoginAction extends ActionSupport implements Action, ModelDriven
{
private final static String LOGIN_FAIL = "loginfail";

LoginInfo loginInfo = new LoginInfo();
public String execute() throws Exception
{

if ("tony".equalsIgnoreCase(loginInfo.getUsername())
&& "1234".equals(loginInfo.getPassword()))
{
// 将当前登录的用户名保存到Session
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
session.put("username", loginInfo.getUsername());
// 出于演示目的,通过硬编码增加通知消息以供显示
loginInfo.getMessages().add("message1");
loginInfo.getMessages().add("message2");
loginInfo.getMessages().add("message3");
return SUCCESS;
}
else
{
loginInfo.setErrorMessage("Username/Password Error!");
return ERROR;
}
}
public Object getModel()
{
return loginInfo;
}
}

model类
-------
package test;

import java.util.ArrayList;
import java.util.List;


public class LoginInfo
{
private String password;
private String username;
private List messages = new ArrayList();
private String errorMessage;

public List getMessages()
{
return messages;
}
public String getErrorMessage()
{
return errorMessage;
}
public void setErrorMessage(String errorMessage)
{
this.errorMessage = errorMessage;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
}
-------
用于的验证的配置文件
LoginAction-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="model.username">
<field-validator type="requiredstring">
<message>请输入用户名!</message>
</field-validator>
</field>
<field name="model.password">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>
Password length must between ${minLength} and ${maxLength} chars!
</message>
</field-validator>
</field>
</validators>

validators.xml文件
-------------------
<validators>
<validator name="required" class="com.opensymphony.webwork.validators.JavaScriptRequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.webwork.validators.JavaScriptRequiredStringValidator"/>
<validator name="int" class="com.opensymphony.webwork.validators.JavaScriptIntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.webwork.validators.JavaScriptDateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.webwork.validators.JavaScriptEmailValidator"/>
<validator name="url" class="com.opensymphony.webwork.validators.JavaScriptURLValidator"/>
<validator name="visitor" class="com.opensymphony.webwork.validators.JavaScriptVisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>

xwork.xml文件
----------------<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default">
<action name="login" class="test.LoginAction">
<result name="success" type="dispatcher">
<param name="location">/main.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/index.jsp</param>
</result>
<interceptor-ref name="params" />
<interceptor-ref name="model-driven" />
<interceptor-ref name="validationWorkflowStack" />
</action>
</package>
</xwork>

webwork-default.xml文件(直接从开发包里拿出来的)

main.jsp
-----
<%@ taglib prefix="ww" uri="webwork"%>
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB18030"
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=GB18030">
<META http-equiv="Content-Style-Type" content="text/css">
<LINK rel="stylesheet" href="/TestWebWork/theme/blue.css" type="text/css">
<TITLE>main.jsp</TITLE>
</HEAD>
<BODY>

<P align="center">Login Success!</P>
<P align="center">Welcome!<ww:property value="#session['username']" /></P>
<P align="center">
<B>Messages:</B><BR>
<ww:iterator value="messages" status="index">
<ww:if test="#index.odd == true">
!<ww:property /><BR>
</ww:if>
<ww:else>
*<ww:property /><BR>
</ww:else>
</ww:iterator>
</P>

</BODY>
</HTML>


错误提示信息:
以下是用2.1的开发包试的时候抛出的异常情况.
(难到要我写配置文件吗?教程里并没有指出.我使用的是webwork2开发指南)
[05-7-15 18:10:09:906 CST] 6017b96f ApplicationMg A WSVR0221I: 应用程序已启动:TestWebWorkEAR
[05-7-15 18:10:16:047 CST] 709d796f WebGroup      I SRVE0180I: [TestWebWork] [/TestWebWork] [Servlet.LOG]: /index.jsp: init
[05-7-15 18:10:16:078 CST] 709d796f DefaultConfig W com.opensymphony.webwork.config.DefaultConfiguration  Could not find webwork.properties
[05-7-15 18:10:18:141 CST] 709d796f WebGroup      I SRVE0180I: [TestWebWork] [/TestWebWork] [Servlet.LOG]: webwork: init
[05-7-15 18:10:18:734 CST] 709d796f ServletDispat W com.opensymphony.webwork.dispatcher.ServletDispatcher  Unable to find 'webwork.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
[05-7-15 18:10:19:750 CST] 709d796f ValidatorFile E com.opensymphony.xwork.validator.ValidatorFileParser  Unable to load validator class com.opensymphony.webwork.validators.JavaScriptRequiredFieldValidator
[05-7-15 18:10:19:875 CST] 709d796f OgnlUtil      W com.opensymphony.xwork.util.OgnlUtil  Caught OgnlException while setting property 'minLength' on type 'com.opensymphony.xwork.validator.validators.StringLengthFieldValidator'.
[05-7-15 18:10:19:891 CST] 709d796f OgnlUtil      W com.opensymphony.xwork.util.OgnlUtil  TRAS0014I: 下列异常已记录 ognl.NoSuchPropertyException: minLength
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:133)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1629)
at ognl.ASTProperty.setValueBody(ASTProperty.java:105)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:180)
at ognl.SimpleNode.setValue(SimpleNode.java:249)
at ognl.Ognl.setValue(Ognl.java:476)
at com.opensymphony.xwork.util.OgnlUtil.internalSetProperty(OgnlUtil.java:183)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:72)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:95)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:84)
at com.opensymphony.xwork.ObjectFactory.buildValidator(ObjectFactory.java:164)
at com.opensymphony.xwork.validator.ValidatorFactory.getValidator(ValidatorFactory.java:54)
at com.opensymphony.xwork.validator.ValidatorFileParser.addValidators(ValidatorFileParser.java:143)
at com.opensymphony.xwork.validator.ValidatorFileParser.parseActionValidators(ValidatorFileParser.java:94)
at com.opensymphony.xwork.validator.ActionValidatorManager.loadFile(ActionValidatorManager.java:238)
at com.opensymphony.xwork.validator.ActionValidatorManager.buildClassValidators(ActionValidatorManager.java:163)
at com.opensymphony.xwork.validator.ActionValidatorManager.buildValidators(ActionValidatorManager.java:212)
at com.opensymphony.xwork.validator.ActionValidatorManager.getValidators(ActionValidatorManager.java:51)
at com.opensymphony.xwork.validator.ActionValidatorManager.validate(ActionValidatorManager.java:64)
at com.opensymphony.xwork.validator.ActionValidatorManager.validate(ActionValidatorManager.java:60)
at com.opensymphony.xwork.validator.ValidationInterceptor.before(ValidationInterceptor.java:36)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:34)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:273)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:243)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)

                                 ognl.NoSuchPropertyException: minLength
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:133)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1629)
at ognl.ASTProperty.setValueBody(ASTProperty.java:105)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:180)
at ognl.SimpleNode.setValue(SimpleNode.java:249)
at ognl.Ognl.setValue(Ognl.java:476)
at com.opensymphony.xwork.util.OgnlUtil.internalSetProperty(OgnlUtil.java:183)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:72)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:95)
at com.opensymphony.xwork.util.OgnlUtil.setProperties(OgnlUtil.java:84)
at com.opensymphony.xwork.ObjectFactory.buildValidator(ObjectFactory.java:164)
at com.opensymphony.xwork.validator.ValidatorFactory.getValidator(ValidatorFactory.java:54)
at com.opensymphony.xwork.validator.ValidatorFileParser.addValidators(ValidatorFileParser.java:143)
at com.opensymphony.xwork.validator.ValidatorFileParser.parseActionValidators(ValidatorFileParser.java:94)
at com.opensymphony.xwork.validator.ActionValidatorManager.loadFile(ActionValidatorManager.java:238)
at com.opensymphony.xwork.validator.ActionValidatorManager.buildClassValidators(ActionValidatorManager.java:163)
at com.opensymphony.xwork.validator.ActionValidatorManager.buildValidators(ActionValidatorManager.java:212)
at com.opensymphony.xwork.validator.ActionValidatorManager.getValidators(ActionValidatorManager.java:51)
at com.opensymphony.xwork.validator.ActionValidatorManager.validate(ActionValidatorManager.java:64)
at com.opensymphony.xwork.validator.ActionValidatorManager.validate(ActionValidatorManager.java:60)
at com.opensymphony.xwork.validator.ValidationInterceptor.before(ValidationInterceptor.java:36)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:34)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:273)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:243)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
你的分析:
我是webwork2的初学者.我在按照从满江红网站上下载下来的文档学习.在我学习到validation验证的时候,我执行了例子.可验证后并没有返回输入页面.出现一个空白页面.按文档里说,如果同时指定三个拦截器就会自动返回到输入页面.不知道是不是我理解有误,还是什么别的问题.新各位高手,指点下小弟.
为什么我除去这一个<interceptor-ref name="workflow"/>这一个拦截器就可以在出问后返回输入页.加上就会出现空白页.不过去掉过.发现ACTION一样的被执行了.
我把JAR包换成了2.1版的,问题还是这样,而且requiredstring验证可以,用require就没有效果.还抛出殿堂.(2,1,7版没有异常出现),其它情况和2.1.7版一样.
反复检查多少不知道问题是什么,我想是不是程序找不到输入页.或者workflow的问题.在API里也查不到它的具体解释.有些心急.
不好意思.版主.在新手区等了一下午也没有人理我.只有再次发贴.希望不要删贴.至少给个理解.
   发表时间:2005-07-15  
我说的执行是execute()都执行了.

有一个提示. DefaultAction W com.opensymphony.xwork.DefaultActionInvocation  No result defined for action test.LoginAction and result input
0 请登录后投票
   发表时间:2005-07-15  
我看了资料说workflow就是不执行execute(),然后返回输入页.而我的情况是定在一个空页面没反应.如果去掉workflow能返回.但应该是因为执行完action后由action控制的返回.一定是workflow找不到输入页.可我不知道为什么.也没有什么文章提示需要配置什么.
0 请登录后投票
   发表时间:2005-07-15  
晕了.
加一个
<result name="input"  type="dispatcher">
     <param name="location">/index.jsp</param>
</result>
在xwork.xml里就好了.

怎么在开发指南里没有看到....难道是我眼花了,还是有什么别的办法.
0 请登录后投票
   发表时间:2005-07-15  
而且required也不起作用.
用了requiredstring才行.
0 请登录后投票
论坛首页 Java企业应用版

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