[size=18px][size=16px][size=14px]我最近开始学习struts2,跟着视频学习做自定义类型转换器可是不知道为什么出了错误,上网找了半天也没结果,现将关键的源代码和错误贴上希望哪位高人指点啊,小弟在此谢过啊!!!
登陆界面test.jsp:</head>
 <body>
<h1>使用分号隔开用户名和密码</h1>
<form action="userAction">
<input type="text" name="user"/><br/>
<input type="submit" name="submit">
</form>
 </body>
</html>
struts2.xml
<struts>
<package name="struts2" extends="struts-default">
 <action name="userAction" class="com.li.struts2.UserAction">
 <result name="success">/output.jsp</result>
</action>
</package>
</struts>
javabean:package com.li.bean;public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}}
Action:package com.li.struts2;import com.li.bean.User;
import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {
private User user; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.print("username:"+user.getUsername());
System.out.print("password:"+user.getPassword());
return SUCCESS;
}}
转换器converter:package com.li.converter;
import java.util.Map;
import java.util.StringTokenizer;
import com.li.bean.User;
import com.sun.xml.internal.ws.api.pipe.NextAction;import ognl.DefaultTypeConverter;public class UserConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(User.class == toType)//从页面向后台的对象转换
{
String[] str = (String[]) value;
String firstValue = str[0];

      StringTokenizer st = new StringTokenizer(firstValue,";");
      String username = st.nextToken();
      String password = st.nextToken();
      User user = new User();
      user.setUsername(username);
      user.setPassword(password);
      return user;
}return null;
}}
UserAction-convsertion.properties:
user=com.li.converter.UserConverter
出现的错误:警告: Error setting expression 'user' with value '[Ljava.lang.String;@163d86c'
ognl.MethodFailedException: Method "setUser" failed for object com.li.struts2.UserAction@4686d [java.lang.NoSuchMethodException: com.li.struts2.UserAction.setUser([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1292)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1481)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:77)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
Caused by: java.lang.NoSuchMethodException: com.li.struts2.UserAction.setUser([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
... 67 more
/-- Encapsulated exception ------------\
java.lang.NoSuchMethodException: com.li.struts2.UserAction.setUser([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1481)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:77)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
\--------------------------------------/
2012-4-15 16:45:22 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Could not find action or result
No result defined for action com.li.struts2.UserAction and result input
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:376)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidatio[size=24px]
nInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
错误表面的意思能看懂,但是就是不知道哪里出错了,弄了半天也不好使,拜托大家了啊!!![/size][/size][/size][/size]