OGNL型转换器演示

时间:2013-03-25 03:25:44

标签: java web struts2 ognl

我有一个演示,展示我们如何在struts2中定义客户类型转换器。演示非常简单,输入一个字符串“Tom,12”,表示用户的姓名和年龄。该值将放入用户对象中。并且控制台将输出这些值。 下面是代码: JSP:

   <form action=testconvert method="post">
      Please enter your name<br/>
      <input type="text" name="user"/>
      <input type="submit" value="test"/>
   </form>

UserConverter:这是一个用户定义的转换器。

public class UserConverter extends DefaultTypeConverter {
    @Override
    public Object convertValue(Map context, Object value, Class toType) {

        System.out.println("convertValue");
        if(User.class == toType)  
        {

            String[] str = (String[])value;
            String firstValue = str[0];

            System.out.println(firstValue);

            StringTokenizer st = new StringTokenizer(firstValue, ",");

            String username = st.nextToken();
            int age =Integer.parseInt( st.nextToken());

            User user = new User();

            user.setUsername(username);
            user.setAge(age);

            return user;        
        }
        else if(String.class == toType) 
        {
            User user = (User)value;

            String username = user.getUsername();
            int age = user.getAge();

            String userInfo = "username: " + username + ", age: " + age;

            return userInfo;
        }
        return null;
    }

}

我有一个名为“testconvert-conversion.properties”的属性文件:

user=com.tutorialspoint.sconvert.UserConverter

行动档案:

public class testconvert extends ActionSupport
{
    private User user;

    public User getUser()
    {
        System.out.println("getUser");
        return user;
    }

    public void setUser(User user)
    {
        System.out.println("setUser");
        this.user = user;
    }

    @Override
    public String execute() throws Exception
    {
        System.out.println("username: " + user.getUsername());
        System.out.println("age: " + user.getAge());

        System.out.println("execute");
        return SUCCESS;
    }
}

当我提交值:“Tom,20”时,控制台输出低于内容:

WARNING: Parameter [user] is not on the excludeParams list of patterns and will be appended to action!

convertValue
Tom,20
setUser
username: Tom
age: 20
execute

它有一个警告,但它可以输出我需要的东西。 然后我改变了JSP文件。我更改了以下代码:

<input type="text" name="user222"/>

我认为输入标签的名称并不重要。但我错了。我没有正确得到输出。

所以我的问题是:
1,什么是警告意义?

2,如果我希望<input>名称是user222,我该怎么办?

1 个答案:

答案 0 :(得分:0)

如果要使用不依赖于操作类中的属性名称的转换器,则需要定义应用程序范围的转换器。这是在xwork-conversion.properties文件中完成的,该文件位于类路径的根目录中。

your_package.User = com.tutorialspoint.sconvert.UserConverter