比方说我有一个action
里面有一个应用属性Cat和一个基本属性int age
并且我配置的自定类型转化器。但是我只转换cat属性,可是运行的话,系统总是抛出异常500。java.lang.NoSuchMethodException: setAge([Ljava.lang.String;)
但是如果我把相应的注册自定义转换器的文件删掉的话,就不会抛这个异常,并且会有默认提示Invalid field value for field "age".但我输入的是一个字符的时候比如说a。
里面有一个应用属性Cat和一个基本属性int age
并且我配置的自定类型转化器。但是我只转换cat属性,可是运行的话,系统总是抛出异常500。java.lang.NoSuchMethodException: setAge([Ljava.lang.String;)
但是如果我把相应的注册自定义转换器的文件删掉的话,就不会抛这个异常,并且会有默认提示Invalid field value for field "age".但我输入的是一个字符的时候比如说a。
pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<p>这是一个struts的应用</p>
<s:form method="post" action="Login2Action.action">
<s:textfield name="cat" label="cat"></s:textfield><br>
<s:textfield name="age" label="age"></s:textfield><br>
<s:textfield name="name" label="name"></s:textfield><br><s:password name="password" label="password"></s:password><br>
<s:submit value="submit" align="left" ></s:submit><br>
</s:form>
</body>
</html>
转换器类********************package com.struts2;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class CatConversion extends StrutsTypeConverter { @Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
int x =0;
Cat c = new Cat();
if(null!=arg1[0] && ! "".equals(arg1[0])){
try{
x = Integer.parseInt(arg1[0]);
}catch(NumberFormatException w){
x = -1;
}
c.setAge(x);
}else
c.setAge(x);
return c;
} @Override
public String convertToString(Map arg0, Object arg1) {
Cat c = (Cat)arg1;
return "这只猫的年龄是" + c.getAge();
}}Action类***************************
package com.struts2;import com.opensymphony.xwork2.ActionSupport;public class Login2Action extends ActionSupport {
private String name;
private String password;
private String age;
private Cat cat;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
public void validate() {
try{
if(null== this.getName() || "".equals(this.getName().trim()))
addFieldError("name", "name 不可以为空");
if(null== this.getPassword() || "".equals(this.getPassword()))
addFieldError("password", "password 不可以为空");
if(null==this.getCat())
addFieldError("cat","cat is null");
if(null==this.getCat())
addFieldError("cat", "cat 字段的年龄输入有问题");
}catch(Exception e){
addFieldError("age", "输入有错误,请重新输入");
}
}
}
Login2Action-conversion.properties文件的内容cat=com.struts2.CatConversion
是cat还是action
*******************************
<s:form method="post" action="Login2Action.action">
<s:textfield name="cat" label="cat"> </s:textfield> <br>*******************************
</html> 如果你想表示猫的年龄的话应该用<s:textfield name="cat.age" label="cat"> </s:textfield>