我有一个struts 2项目,其中有3个动作执行不同的数据报告功能。我正在创建主页操作,以显示主页上其他3个操作的数据片段。
目前我有Home.action导入其他3个动作,然后使用其他动作对象来获取数据。这感觉“不正确”,所以我想知道在Struts中最好的方法是什么?最好不要过多地编辑原来的3个动作。
答案 0 :(得分:1)
我有类似的困境,我通过在struts.xml
中定义一个仅返回操作结果的不同操作来解决它们(没有周围的tiles
等。)。
然后我使用jQuery
使用Ajax
获取不同的操作,并且实际上让服务器计算不同请求中的不同操作有额外的好处,因此我的用户可以看到一些结果先于其他人,如果您的行动花费3秒钟来计算结果,那就太好了。
请注意,这里使用Tiles实际上完全无关紧要。 你可以通过使用不同的JSP来获得相同的效果(假设你想要一点点自定义外观)。
我的loadBrokerReport操作在更大的周围区块(布局)中显示代理报告,但是loadBrokerReportAjax从同一个Action类执行相同的方法,但是通过ajaxReport.jsp文件呈现结果(那样杂乱,更适合于显示在其他东西旁边。)
<!-- This is the normal action the users select from menu -->
<action name="loadBrokerReport" method="loadBrokerReport" class="ee.reinmets.intra.action.BrokerReportsAction">
<result type="tiles">brokerReport</result>
</action>
<!-- This is the action called via ajax -->
<action name="loadBrokerReportAjax" method="loadBrokerReport" class="ee.reinmets.intra.action.BrokerReportsAction">
<result>/WEB-INF/pages/brokerReports/ajaxReport.jsp</result>
</action>
<!-- This is the tile i'm referencing above, in tiles.xml -->
<definition name="brokerReport" extends="default">
<put-attribute name="body" value="/WEB-INF/pages/brokerReports/normalReport.jsp" />
</definition>