我的struts项目结构如下:
page1
- > action1
- > page2
- > action2
- > page3
我需要的是我在第1页的输入标签中输入的值,以便在action2中访问。
这是我的代码:
第1页:
<div class = "container">
<s:form id = "idinput" method = "post" action = "idEntered">
Enter id: <input id = "txtid" name = "txtid" type = "text" />
<input id = "cmdsubmit" name = "cmdsubmit" type = "submit" value = "enter details" />
</s:form>
</div>
动作1:
public class AddId extends ActionSupport {
private int txtid;
//getter and setter
@Override
public String execute() throws Exception {
return "success";
}
}
第2页:
<div class = "container">
<s:form id = "formvalues" method = "post" action = "formEntered">
<p>Your id entered is: <s:property value = "txtid" /></p>
First name: <input id = "txtfname" name = "txtfname" type = "text" />
Last name: <input id = "txtlname" name = "txtlname" type = "text" />
Age: <input id = "txtage" name = "txtage" type = "text" />
<input id = "cmdform" name = "cmdform" type = "submit" value = "submit form" />
</s:form>
</div>
1动作:
public class AddForm extends ActionSupport {
private String txtfname;
private String txtlname;
private int txtage;
private int txtid;
//getters and setters
@Override
public String execute() throws Exception {
return "success";
}
}
并在
中显示所有内容PAGE3:
<div class = "container">
ID: <s:property value = "txtid" /><br>
first name: <s:property value = "txtfname" /><br>
last name: <s:property value = "txtlname" /><br>
age: <s:property value = "txtage" />
</div>
这是我遇到问题的地方txtid
显示为null
,我从中推断该值未从page2
传递到action2
我提出的解决方案是使用
<s:hidden value = "%{txtid}" name = "txtid2 />
在page2
中的格式中,我可以在txtid
中使用txtid2
的值作为action2
,但这似乎更像是一个黑客而不是实际的解决方案,欢迎任何其他建议。
答案 0 :(得分:3)
在您希望将字段值从一个操作传递到另一个操作的情况下,您可以配置字段的范围。只需在每个操作中使用getter和setter放置相同的字段,在您的情况下,它将是action1
和action2
。字段名称为txtid
。除了scope
拦截器不包含在defaultStack
中之外,您还应该在操作配置中引用它。例如
<action name="action1" class="com.package.action.AddId">
<result>/jsp/page2.jsp</result>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="scope">
<param name="key">mykey</param>
<param name="session">txtid</param>
<param name="autoCreateSession">true</param>
</interceptor-ref>
</action>
<action name="action2" class="com.package.action.AddForm">
<result>/jsp/page3.jsp</result>
<interceptor-ref name="scope">
<param name="key">mykey</param>
<param name="session">txtid</param>
<param name="autoCreateSession">true</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
</action>
现在,您可以在其下方使用密钥mykey
和字段txtid
。在每个操作中为字段提供访问器将使传输字段值从一个操作到另一个操作。在上面的示例中使用了basicStack
,它是拦截器堆栈的骨架,它不包括一些拦截器,包括validation
拦截器。如果您需要为操作提供其他功能,则应在操作配置中构建自定义堆栈或引用其他拦截器。