struts 2动作没有setter getter

时间:2013-05-16 21:48:17

标签: java parameters struts2 ognl

我想为来自用户界面的数据创建一个没有setter和getter属性的动作类。相反,我想在我自己的构建器类中使用ServletActionContext.getRequest().getParameterMap()来构造对象。

我创建了没有属性的Action类。当我提交表单时,我遇到了ognl.OgnlException: target is null for setProperty(null, "field-name", [Ljava.lang.String;@5513fab7)

是否需要任何其他约定或配置来传达Struts2框架以不设置属性并停止避免我上面收到的异常?

2 个答案:

答案 0 :(得分:2)

是的,您需要删除此特定操作的Struts params interceptor映射。我相信你可以采取与this related question类似的方法。否则你将不得不用你想要的拦截器创建另一个拦截器堆栈,减去参数拦截器并将动作映射到struts.xml中的那个堆栈,或者在你的动作类上使用@InterceptorRef注释,假设你正在使用惯例插件。

答案 1 :(得分:2)

您可以通过将参数excludeParams设置为拦截器,从params拦截器的可接受参数中排除某些属性。默认情况下,此参数使用

初始化
<interceptor-ref name="params">
  <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>

您应该在这里添加属性,它接受正则表达式模式以匹配属性名称。使用已接受的参数名称应用的策略可能会通过ParameterNameAware实施的操作受到影响,您可以删除上面给出的限制。

更具体地说“来自用户界面的数据”我坚持认为interceptor-ref元素的参数在启动时应用于拦截器,并且不存储在配置管理器的其他位置。这意味着您无法在运行时获取此参数,只能通过更新和重新加载配置文件struts.xml来更改。如果您将配置保存在安全的地方并且不受修改,那么您可以对正在运行的应用程序安全性提出更多声明。