浏览 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里也查不到它的具体解释.有些心急. 不好意思.版主.在新手区等了一下午也没有人理我.只有再次发贴.希望不要删贴.至少给个理解. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-07-15
我说的执行是execute()都执行了.
有一个提示. DefaultAction W com.opensymphony.xwork.DefaultActionInvocation No result defined for action test.LoginAction and result input |
|
返回顶楼 | |
发表时间:2005-07-15
我看了资料说workflow就是不执行execute(),然后返回输入页.而我的情况是定在一个空页面没反应.如果去掉workflow能返回.但应该是因为执行完action后由action控制的返回.一定是workflow找不到输入页.可我不知道为什么.也没有什么文章提示需要配置什么.
|
|
返回顶楼 | |
发表时间:2005-07-15
晕了.
加一个 <result name="input" type="dispatcher"> <param name="location">/index.jsp</param> </result> 在xwork.xml里就好了. 怎么在开发指南里没有看到....难道是我眼花了,还是有什么别的办法. |
|
返回顶楼 | |
发表时间:2005-07-15
而且required也不起作用.
用了requiredstring才行. |
|
返回顶楼 | |