转换器代码:public class LoginActionConverter extends DefaultTypeConverter {    public Object convertValue(Map context, Object value, Class toType) {        if (User.class.equals(toType)) {
            String param[] = (String[]) value;
            User user = new User();
            user.setName(param[0]);
            user.setName(param[1]);            return user;
        }
        else if (String.class.equals(toType)) {
            User user = (User) value;
            String result = "user name is " + user.getName() + " and password is " + user.getPassword();            return result;
        }
        else {
            return null;
        }
    }}
LoginAction 代码:public class LoginAction extends ActionSupport {    private static final long serialVersionUID = -5082073797287003440L;
    
    
    private User user;
    
    
    public String execute() throws Exception {
        
        System.out.println(user.getName());
        
        return SUCCESS;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }}
LoginAction-conversion.properties
user=com.demo.converter.LoginActionConverter
似乎这个类型转换没有生效,运行时在action中抛出了空指针异常,LoginAction中的user对象没有将页面表单输入的值填充。不知道是哪里的设置不正确,请大家指教,谢谢环境: struts2 2.0.14 tomcat6.0.16 jdk1.6

解决方案 »

  1.   

    try{
    if (User.class.equals(toType)) {
                String param[] = (String[]) value;
                User user = new User();
                user.setName(param[0]);
                user.setName(param[1]);            return user;
            }
            else if (String.class.equals(toType)) {
                User user = (User) value;
                String result = "user name is " + user.getName() + " and password is " + user.getPassword();            return result;
            }
    }catch(Exception e){
       return null;
    }这样看看
      

  2.   

    谢谢楼上关注
    我试了下没有用 问题好像是这个conversion根本没有被调用,这个转换器应该是到达action之前就会被调用的,将转换好的user对象注入到action中 ,可是我设置了断点 没有进来。
      

  3.   

    你最好在转换器中输出一句话,如果你tomcat不是debug方式启动的话,
    有断点也是不会停的。
    另外你的properties文件跟action放在一个包下吧??
      

  4.   

    -conversion.properties 文件我是放在和LoginAction同包下的 
    我也尝试了下全局的类型转换 也是没有被回调
    我的确是debug下的调试断点的 直接进入action了 没有进入类型转换器。。
      

  5.   

    if (oType==tUser.class) {
                String[] param = (String[]) value;
                User user = new User();
                String[] userValues=param[0].split(",");
                user.setName(userValues[0]);
                user.setPass(userValues[1]);            return user;
            }
      

  6.   

    页面表单:
    <form action="login.action"  method="post">
         <div align="center">
           <table width="">
            <tr>
           
            <td  align="center" >请输入用户名和口令</td>
            </tr>
            <tr>
            <td valign="top"><br></td><td>用户名</td>  <td valign="top"><br></td><td>
            <input type="text" name ="name"></td>
           
            </tr>
           
            <tr>
            <td valign="top"><br></td><td>口 令</td><td valign="top"><br></td><td>
            <input type="password" name = "password"></td>
           
            </tr>
           
            <tr>
            <td valign="top"><br></td><td align="right"><input type="submit" value="提交"></td>
            <td valign="top"><br></td><td><input type="reset" value="取消"></td>
            </tr>
           </table>
         </div>
         </form>
    struts.xml
    <struts> <package name="default" extends="struts-default">

    <action name="login" class="com.john.web.action.LoginAction">
    <result name="input">/login.jsp</result>
    <result name="success">/result.jsp</result>
    <result name="error">/error.jsp </result>

    </action>
    </package></struts>
    我参看官方网站的doc说 只要在classpath下找到了转换器的*-conversion.properties 文件 就会自动的调用
    可是这里没有调用,百思不得其解!~
      

  7.   

    你是说你获取不到提交上来的值?如果是那样的话你在你的页面里面将input中的name改为:user.name,user.password 试试
      

  8.   

    很长时间不用struts2了 你这个转换器是不是就相当于拦截器 得配置下吧?。。
      

  9.   

    说来惭愧,我struts2项目做到现在就没用过Converter,因为没必要用 (*^__^*) ……