繁体   English   中英

struts 2动作没有setter getter

[英]struts 2 action with no setter getter

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

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

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

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

您可以通过将参数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来更改。 如果您将配置保存在安全的地方并且不受修改,那么您可以对正在运行的应用程序安全性提出更多声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM