Struts 2的 - 我可以访问的另一个动作是不是值栈属性?(Struts 2 - Can I a

2019-10-18 06:51发布

我有两个JSP页面从两个不同的动作显示两个列表:第A显示员工列表,网页B显示器部门列表。

这两个网页上有一个共同的文本字段(从第三JSP页面在内)的顶部按名称搜索员工:

<s:form action="searchEmployeesByName">
    <s:textfield name="employeeName" />
    <s:submit>
</s:form>

搜索行动是阶级的一部分EmployeeAction ,我可以加载页面A和执行没有问题搜索。 然而,在加载页面的时候B ,我遇到ognl.NoSuchPropertyException因为财产employeeName不上ValueStackDepartmentAction

我怎么解决这个问题? 有没有访问任何方式employeeNameEmployeeActionDepartmentAction ? 或者我应该如何重新安排我的行动,执行公共搜索功能?

这是我行动的配置文件:

<struts>

    <package name="employee" namespace="/employee" extends="tiles-default">

        <action name="getEmployeeList" class="my.package.EmployeeAction"
            method="getEmployeeList">
            <result name="success">/employee_list.tiles</result>
        </action>

        <action name="searchEmployeesByName" class="my.package.EmployeeAction"
            method="searchEmployeesByName">
            <result name="success">/search_results.tiles</result>
        </action>

    </package>

    <package name="department" namespace="/department" extends="tiles-default">

        <action name="getDepartmentList" class="my.package.DepartmentAction"
            method="getDepartmentList">
            <result name="success">/department_list.tiles</result>
        </action>

    </package>

</struts>

Answer 1:

行动是根据要求创建,因为它是局部的,线程不共享的环境。 如果通过动作所需要的属性集,那么你应该在url与参数提供它或把它从会话。 您应该创建getter和setter方法要传递的属性。 通常通过与做参数param标签可以用来参数化其他标签。

你的情况,你可以使用param标记的结果配置来创建一个动态参数

<result name="searchEmployeesByName" type="redirectAction">
  <param name="actionName">department</param>
  <param name="employeeName">${employeeName}</param>
</result>

见动态结果的配置。



Answer 2:

所述ognl.NoSuchPropertyException如果尝试对属性从一个对象,该对象不具有这样的属性提取被抛出。

因此,有可能不是你的OGNL表达式创建您相应的Action类的getter和setter方法。

你可以在你的结果标签使用结果类型链(不推荐)在另外一个动作的访问属性。

你也可以使用redirectAction结果类型。

 <action name="getEmployeeList" class="...">
    <!-- Chain to another namespace -->
    <result type="chain">
        <param name="actionName">getDepartmentList</param>
    </result>
</action>

这里是所有的结果类型对Struts 2。



Answer 3:

谢谢大家的答案。 我解决了这个通过注释在struts.properties这些行:

struts.ognl.logMissingProperties=true

struts.el.throwExceptionOnFailure=true

虽然我还是不明白为什么Struts的尝试之前找到employeeName。



文章来源: Struts 2 - Can I access properties of another action which is not on the ValueStack?