java - 修剪 Struts2 文本字段字符串输入

标签 java string struts2

修剪这个字符串的最佳方法是什么/放置修剪代码的最佳位置是什么?

假设我的 jsp 中有以下文本字段:

<s:textfield label="First Name" name="person.firstname"/>

Action 类:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
    private Person person;
    // Getters, setters and action logic
}

bean :

public class Person implements Serializable {
    private String lastname;
    private String firstname;
    // Getters and setters
}

我可以更改 bean 中的默认设置,但这看起来像是 hack:

public void setFirstname(String firstname) {
    this.firstname = firstname.trim();
}

编辑:我也看到了这个问题:struts2 trim all string obtained from forms有些人还建议“正确”的方法是使用拦截器。

为什么拦截器是“正确”的方式?更改 bean 的 setter 有什么问题?

最佳答案

可以用Struts2 converters来完成.

public class TrimmingStringConverter extends StrutsTypeConverter {

    public Object convertFromString(Map ctx, String[] values, Class arg2) {
        if (values != null && values.length > 0) {
            return values[0].trim();
        }

        return null;
    }

    public String convertToString(Map ctx, Object o) {
        if (o != null) {
            return o.toString();
        }
        else {
            return null;
        }
    }

    public Object convertValue(Map context, Object o, Class toClass)
    {
        if (o == null) {
            return null;
        } else if (toClass == java.lang.String.class) {
            if (o instanceof String[]) {
                String[] os = (String[]) o;

                if (os.length > 0) {
                    return os[0].trim();
                }
            }

            return o.toString().trim();
        }

        return super.convertValue(context, o, toClass);
   }
}

必须在xwork-conversion.properties中注册: java.lang.String=es.jogaco.webapp.TrimmingStringConverter

这将应用于所有 用户输入。

如果您有默认的 struts2 拦截器,它将起作用。引用自 struts2 文档:

By default, the conversion interceptor is included in struts-default.xml in the default stack

另外,我在我的 struts2 应用程序中使用它。

关于java - 修剪 Struts2 文本字段字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410817/

相关文章:

java - 在 Joda/Hibernate 中映射不带时间的日期

c++ - 递归比较字符串的函数 - C++

java - 如何检索<s :radio> within <s:iterator> tag into Struts2's action的数据

css - 为什么背景: url() redirect to the image?

java - 我如何从 Hibernate 的第三张表中获取属性?

java - 使用Thread.Sleep(1000)时,在Jframe中移动像素并使JFrame崩溃

java - 在 Tomcat 上运行后 Web 服务验证失败

java - 如何在方法中输入数组作为参数?

c++ - 为什么字符串作为指针或字符串作为原始数组总是在重载函数中作为指针调用?

c - Sizeof char 数组给出非常离谱的值