我想为来自用户界面的数据的属性创建一个没有setter和getter的动作类.相反,我想在自己的构建器类中使用ServletActionContext.getRequest().getParameterMap()来构造对象.
我创建了没有属性的Action类.提交表单时,我遇到ognl.OgnlException:setProperty(null,“ field-name”,[Ljava.lang.String; @ 5513fab7)的target为null
是否需要其他任何约定或配置来传达Struts2框架以不设置属性并停止避免我在上面收到的异常?
解决方法:
通过将参数excludeParams设置为拦截器,可以从params
拦截器的可接受参数中排除某些属性.默认情况下,此参数使用
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
您应该在此处添加属性,它接受正则表达式模式以匹配属性名称.可以通过ParameterNameAware
实现的操作来破坏采用可接受的参数名称的策略,在该操作中您可以删除上面给出的限制.
为了更具体地说明“来自用户界面的数据”,我坚持将拦截器ref元素的参数在启动时应用于拦截器,并且不会存储在配置管理器中的其他位置.这意味着您无法在运行时获取此参数,只能通过更新和重新加载配置文件struts.xml进行更改.如果您将配置保存在安全的地方并且可以进行修改,那么可以对运行中的应用程序安全性提出更多要求.