Java struts 2不带setter-getter的操作

Java struts 2不带setter-getter的操作,java,parameters,struts2,ognl,Java,Parameters,Struts2,Ognl,我想为来自用户界面的数据创建一个属性上没有setter和getter的action类。相反,我想在我自己的生成器类中使用ServletActionContext.getRequest().getParameterMap()来构造对象 我已经创建了没有属性的Action类。提交表单时,我遇到了ognl.OgnlException:setProperty的目标为null(null,“fieldname”,[Ljava.lang.String;@5513fab7) 是否需要任何其他约定或配置来传递St

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

我已经创建了没有属性的
Action
类。提交表单时,我遇到了
ognl.OgnlException:setProperty的目标为null(null,“fieldname”,[Ljava.lang.String;@5513fab7)


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

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

您可以通过将参数
excludeParams
设置为默认情况下,此参数初始化为

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

dojo\..*、^struts\..*、^session\..*、^request\..*、^application\..*、^servlet(请求|响应)\..*、参数*
您应该在此处添加属性,它接受正则表达式模式以匹配属性名称。使用接受的参数名称应用的策略可能会通过执行的操作受到影响,您可以在这些操作中删除上述限制

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