我正在尝试使用validaton.xml进行简单验证,验证工作的用户名是字符串类型,但不是用于int类型的密码。Struts 2 validation.xml不起作用
Action类
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 5271055255991498361L;
private String username;
private int password;
public String execute() {
if (this.username.equals("admin")&& this.password==123) {
addActionMessage("Welcome admin");
return SUCCESS;
} else {
addActionError("Invalid credentials");
return ERROR;
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
的LoginAction-validation.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>Please enter a user name</message>
</field-validator>
</field>
<field name="password">
<field-validator type="required">
<message>Please enter a password</message>
</field-validator>
</field>
</validators>
struts.xml的
<struts>
<constant name="struts.action.extension" value=","/>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="user" namespace="/" extends="struts-default">
<action name="login" class="net.training.user.action.LoginAction" method="execute">
<result name = "input">Login.jsp</result>
<result name = "error">Login.jsp</result>
<result name= "success">/customer/CustomerForm.jsp</result>
</action>
</package>
</struts>
报告该错误是
WARNING: Error setting expression 'password' with value '[Ljava.lang.String;@1f2428d'
ognl.MethodFailedException: Method "setPassword" failed for object [email protected] [java.lang.NoSuchMethodException: net.training.user.action.LoginAction.setPassword([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
...
Caused by: java.lang.NoSuchMethodException: net.training.user.action.LoginAction.setPassword([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1246)
... 63 more
/-- Encapsulated exception ------------\
java.lang.NoSuchMethodException: net.training.user.action.LoginAction.setPassword([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1246)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
...
\--------------------------------------/
Jul 24, 2013 3:26:18 PM com.opensymphony.xwork2.interceptor.ParametersInterceptor error
SEVERE: Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'password' on 'class net.training.user.action.LoginAction: Error setting expression 'password' with value '[Ljava.lang.String;@1f2428d'
Error setting expression 'password' with value '[Ljava.lang.String;@1f2428d' - Class: ognl.OgnlRuntime
File: OgnlRuntime.java
Method: callAppropriateMethod
Line: 1305 - ognl/OgnlRuntime.java:1305:-1
at com.opensymphony.xwork2.ognl.OgnlValueStack.handleOgnlException(OgnlValueStack.java:211)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:172)
...
Caused by: ognl.MethodFailedException: Method "setPassword" failed for object [email protected] [java.lang.NoSuchMethodException: net.training.user.action.LoginAction.setPassword([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
...
Caused by: java.lang.NoSuchMethodException: net.training.user.action.LoginAction.setPassword([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1246)
... 63 more
的Login.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror/>
<s:fielderror/>
<s:form action="login" method="post" namespace="/" >
<s:textfield name="username" key="label.username" size="20" />
<s:textfield name="password" key="label.password" size="20" />
<s:submit />
</s:form>
</body>
</html>
Struts的版本:2.3.15
这显然不是验证问题,而是配置或表单问题。设置整数是有效的,所以我怀疑其他的东西是错的,但是现在不能测试任何东西。 –
@DaveNewton给了我一些方向,我应该在哪里看看..我无法弄清楚。 – wolverine
什么版本的S2?表单是什么样的?你有github上的SSCCE/etc我可以检查吗? –