关于struct2转换器的问题,报nullpointerexception的错,不知为啥,查了好几遍了

beans

package com.windvalley.beans;

public class UserInfo {
    private String userName;
    
    private String passWord;

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getPassWord() {
        return passWord;
    }
}

 转换器

package com.windvalley.converter;

import java.util.Map;
import java.util.StringTokenizer;

import com.windvalley.beans.UserInfo;

import ognl.DefaultTypeConverter;

public class UserinfoConverter extends DefaultTypeConverter {

    @Override
    public Object convertValue(Map context, Object value, Class toType) {
        // TODO Auto-generated method stub
        if (UserInfo.class == toType)       //页面向后台对象转换
        {
            String[] str = (String[])(value);
            
            String firstValue = str[0];
            
            StringTokenizer st = new StringTokenizer(firstValue, ";");
            
            String userName = st.nextToken();
            
            String passWord = st.nextToken();
            
            UserInfo userInfo = new UserInfo();
            
            userInfo.setUserName(userName);
            userInfo.setPassWord(passWord);
            
            return userInfo;
        }
        else {
            return null;
        }
    }
}

 action

package com.windvalley.struts2;

import com.opensymphony.xwork2.ActionSupport;
import com.windvalley.beans.UserInfo;

public class UserInfoAction extends ActionSupport {
    private UserInfo userInfo;

    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }

    public UserInfo getUserInfo() {
        return userInfo;
    }

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.print(userInfo.getUserName());
        System.out.print(userInfo.getPassWord());
        return SUCCESS;
    }
}

 UserInfoAction-conversion.properties

userInfo=com.windvalley.converter.UserinfoConverter

 Struct

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="struts2" extends="struts-default" namespace="/">
        <action name="userinfo" class="com.windvalley.struts2.UserInfoAction" >
            <result name="success">/userinfo.jsp</result>
        </action>
    </package>
</struts>

 login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Struct2 Login</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
    <form action="userinfo.action">
        <h1>demo: userInfo</h1><br>
        userInfo: <input type="text" name="userinfo" /> <br>
        <input type="submit" value="submit">
    </form>
  </body>
</html>

 用的dtd是2.1

报错为

java.lang.NullPointerException
    com.windvalley.struts2.UserInfoAction.execute(UserInfoAction.java:25)

 

不用转换的,这样写
[code="html"]

demo: userInfo


username:
password:

[/code]

直接在页面文本名字定义成 实体类.属性