nmc*_*nmc 6 java string struts2
修剪此字符串的最佳方法是什么?放置修剪代码的最佳位置在哪里?
假设我的jsp中有以下文本字段:
<s:textfield label="First Name" name="person.firstname"/>
Run Code Online (Sandbox Code Playgroud)
动作类:
public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
private Person person;
// Getters, setters and action logic
}
Run Code Online (Sandbox Code Playgroud)
豆子:
public class Person implements Serializable {
private String lastname;
private String firstname;
// Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我可以更改bean中的默认设置,但这似乎是一个黑客:
public void setFirstname(String firstname) {
this.firstname = firstname.trim();
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也看到了这个问题:struts2修剪从表单中获取的所有字符串,其中一些人也建议"正确"的方法是使用拦截器.
为什么拦截器是"正确的"方式?改变bean的二传手有什么不对?
它可以使用Struts2转换器完成.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
它必须在xwork-conversion.properties中注册:java.lang.String = es.jogaco.webapp.TrimmingStringConverter
这将应用于所有用户输入.
如果您有默认的struts2拦截器,它将起作用.引自struts2 doc:
默认情况下,转换拦截器包含在默认堆栈中的struts-default.xml中
另外,我在struts2应用程序中使用它.
简短的回答是默认情况下不会,没有内置机制可以执行此操作,您要么需要在操作类中执行此操作,要么某种 java 脚本会为您执行此操作。
其他可能的方法是创建一个拦截器来执行此操作,并选择排除或类似的长途跋涉。
我相信Interceptor是一个很好的方法,S2最好有这样的拦截器。