【问题标题】:struts 2 action with no setter getter没有setter getter的struts 2动作
【发布时间】:2013-05-16 21:48:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: java parameters struts2 ognl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多