修剪这个字符串的最佳方法是什么/放置修剪代码的最佳位置是什么?
假设我的 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/