【发布时间】:2015-10-08 07:09:54
【问题描述】:
我有一个搜索框,它显示在每一页上。搜索框的 JSP 代码通过图块插入到每个页面中。
搜索框有一个表单和一个动作类SearchAction,它需要为下拉框预加载一些属性。 SearchAction 类有一个 input() 方法,它执行此初始化。
有些页面在主区域也有自己的表单。也有自己的动作课。他们还有一个input() 方法,可以进行一些预加载。
- 是否可以在同一个视图中使用两个操作?
- 每个表单如何访问自己的操作属性。
- 如何才能在呈现 JSP 之前调用两个操作类的输入法?
更新:
我正在添加一个精简的示例,因为可能不清楚我要做什么。这是一个注册页面register.jsp 和RegisterAction。该页面还包含搜索表单。 (顺便说一句:我在动作类中省略了 getter/setter 和其他东西以保持简短):
register.jsp:
<s:form action="executeSearch">
<s:textfield key="name" label="Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
<s:form action="executeRegister">
<s:textfield key="firstName" label="First Name"/>
<s:textfield key="lastName" label="Last Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
struts.xml:
<action name="*Search" class="action.SearchAction" method="{1}">
<result name="success">/searchresult.jsp</result>
</action>
<action name="*Register" class="action.RegisterAction" method="{1}">
<result name="input">/register.jsp</result>
<result name="success">/registerOk.jsp</result>
</action>
SearchAction.java:
public class SearchAction extends ActionSupport {
private String name;
private int age;
@Override
public String input() throws Exception {
// preload the search form with some demo data
name = "test";
age = 20;
return INPUT;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
...
}
RegisterAction.java:
public class RegisterAction extends ActionSupport {
private String firstName;
private String lastName;
private int age;
@Override
public String input() throws Exception {
// preload the register form with some demo data
firstName = "John";
lastName = "Rambo";
age = 10;
return INPUT;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
...
}
假设我将操作称为inputRegister.action。然后RegisterAction.input() 被调用。属性已设置。结果SUCCESS 导致register.jsp 被渲染。
但是我的搜索表单呢?如何访问搜索操作及其模型。当然,这些都不在ValueStack 上。而且我也没有看到调用SearchAction 的任何方法来初始化它的模型的方法。我特意选择age 参加两个行动班。在呈现的页面中,您可以看到搜索表单还访问了RegisterAction-*.properties(因为它位于ValueStack 之上)。但它需要访问SearchAction。它必须显示 20 而不是 10。
我显然做错了。但即使经过大量的谷歌搜索,我仍然没有找到正确的方法。
【问题讨论】:
-
不要使用
input预加载值。如果需要,您可以使用preparable。您可以通过一项操作导航到 form-s 页面,而其他操作则用于从表单提交。
标签: java jsp struts2 ognl valuestack