我正在开发一个Struts2应用程序。为了删除重复的代码,我希望能够访问 2 个不同 JSP 页面(假设为
Action
和 A
)中的 page_1.jsp
(我们称之为 page_2.jsp
)。到目前为止,一切都很好。问题是,在这 2 个 JSP 页面中,我还需要同时访问附加操作:分别是 B
和 C
。
总结一下:
page_1.jsp
需要访问操作A
和B
,而page_2.jsp
需要访问操作A
和C
。我怎样才能得到它?据我所知,在 type = "redirectAction"
中使用 struts.xml
不起作用,因为它只会重定向到操作,因此 JSP 页面只能访问最后调用的操作。
示例:
<action name="A" class="package.action.A" method="execute">
<result name="success" type="redirectAction">B</result>
</action>
<action name="B" class="package.action.B" method="execute">
<result name="success">page_1.jsp</result>
</action>
据我所知,在上面的示例中
page_1.jsp
只能访问操作B
,对吧?
编辑:
事实上,类
A
被命名为 CreateArchitecturesAction
- 我需要在操作 B
和 C
上访问它,以便在两者上填充类似的 <s:radio>
标签。代码就这么简单:
public class CreateArchitecturesAction extends ActionSupport
{
private List<String> architectures;
private static final String intel32 = "Intel 32 Bit", intel64 = "Intel 64 Bit";
public String execute()
{
architectures = new ArrayList<String>();
architectures.add(intel32);
architectures.add(intel64);
return SUCCESS;
}
public List<String> getArchitectures()
{
return architectures;
}
public String getDefaultArchitectureValue()
{
return intel32;
}
}
您只能从 JSP 访问一项操作,但是在分派页面后您可以访问 JSP 中可用的任何范围。所以这个流程
<action name="A" class="package.action.A" method="execute">
<result name="success" type="dispatcher">B</result>
</action>
<action name="B" class="package.action.B" method="execute">
<result name="success">page_1.jsp</result>
</action>
如果您将操作的范围更改为请求范围,您就可以访问操作
B
。