我有大约90个菜单,每个菜单至少有4个代表Crud动作的屏幕。其中,有13个菜单具有波罗的海角色支持&其他人没有。但是,在这87个菜单中,仍然有很多用户的输入波罗的海角色在后端填充了垃圾数据。BE是一个不同的团队,他们无法容纳ATM的更改,因此我必须在前端处理。
我正在寻找一个通用解决方案,所以我只是写一个方法&在其他任何地方重复使用。
我决定的通用解决方案是迭代请求bean对象&通过反思迭代其方法&检查每个值的波罗的海字符。
我拥有的另一个解决方案是迭代httpservlet请求参数&检查它们是否存在波罗的海角色。
我使用的是Struts2和Java 7.我想知道以上两个选项中的哪个更好。我知道反思带有表演警告。但是我觉得这是一种更好的方法,然后httpservlet请求参数。
如果还有其他解决方案,请您分享您的想法/建议。
编辑:对于某些菜单,在我们的应用程序中,我们使用了JSP-Servlet架构,也需要在此类菜单中实现同样的菜单。
不确定"请求bean"所指的是什么。
在任何情况下,拦截器可能是您可以访问参数图的最佳选择。如果您的实际参数嵌套在没有地图访问的bean中,那么您仍然需要反映。
这就是为什么我将S2视为Web和业务逻辑之间的薄层:我倾向于不预先优化发送给业务逻辑的内容,这样我就可以在Web级别提供过滤,例如此(例如,在整个应用程序中可能适用着空格修剪过滤器(。
修剪拦截器看起来大致像这样(如Struts 2.1(:
public class TrimInterceptor extends MethodFilterInterceptor {
private List<String> excluded = new ArrayList<String>();
protected String doIntercept(ActionInvocation invocation) throws Exception {
Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
for (String param : parameters.keySet()) {
if (isIncluded(param)) {
String[] vals = (String[]) parameters.get(param);
for (int i = 0; i < vals.length; i++) {
vals[i] = vals[i].trim();
}
}
}
return invocation.invoke();
}
private boolean isIncluded(String param) {
for (String exclude : excluded) {
if (param.startsWith(exclude)) {
return false;
}
}
return true;
}
public void setExcludedParams(String excludedParams) {
for (String s : StringUtils.split(excludedParams, ",")) {
excluded.add(s.trim());
}
}
}
其中有一些附加代码,但是您要寻找的是我们获得参数值的地方:
String[] vals = (String[]) parameters.get(param);
如果是波罗的海
vals[i] = vals[i].trim();
这里是修剪空格,但是您明白了。
现在可能有一些差异(这是来自Struts 2.1 ERA(,但是应该足以让您完成。