【发布时间】:2013-01-04 06:57:48
【问题描述】:
我正在使用 Struts 2.0。我有一个具有 perName、perAge、perMail 等字段的 Java Bean Person。我想在 JSP 上显示 Java Bean {[1, person1], [2, person2]) 的映射,并允许用户使用文本字段从同一个 JSP 更新它。 bean 中有很多变量,其中一些是可编辑的,而有些则不是。
例如,perName 不可编辑,而 perAge 可编辑。我不想显示不可编辑的字段。如果我仅使用可编辑文件,则在更新后,我将不可编辑字段设为空(更新后 perName 为空)。所以我不能指定 name 属性,因为它在运行时会发生变化。所以我把它们放在 HTTP Session 中并显示它们。我正在使用#session.person[iterator index].perAge 指定文本字段的名称属性。到目前为止,一切正常。但是,如果我更改任何文本字段中的值并尝试更新,我会得到旧的会话属性而不是更改的属性。我希望具有新更改值的旧会话属性和不可编辑字段的值应该保留在用户请求中。我不想使用 JavaScript。 OGNL 或表达式是最受欢迎的。
public class PersonDTO implements Serializable {
private String perName;
private int perAge;
public String getPerName() {
return perName;
}
public void setPerName(String perName) {
this.perName = perName;
}
public int getPerAge() {
return perAge;
}
public void setPerAge(int perAge) {
this.perAge = perAge;
}
}
<s:form action="updatePerson" id="updatePerson">
<table>
<tr>
<td>AGE:<s:textfield name="#session.person.perAge" />
</td>
</tr>
<tr>
<td><s:submit id="update" value="Update" />
</td>
</tr>
</table>
</s:form>
【问题讨论】:
-
请把你的代码放在你目前已经实现的地方?
-
公共类 PersonDTO 实现 Serializable { private String perName;私人int perAge; public String getPerName() { return perName; } public void setPerName(String perName) { this.perName = perName; } public int getPerAge() { return perAge; } 公共无效 setPerAge(int perAge) { this.perAge = perAge;这是我的 Person bean。我在 JSP 上显示
-
在action类中,将class放入session中,HttpSession httpSes = req.getSession(true); httpSes.setAttribute("person", perDTO);检索时,HttpSession httpSes = req.getSession(true); PersonDTO sesDTO = (PersonDTO) httpSes.getAttribute("person");但是我得到了在显示时设置的年龄,而不是在文本字段中编辑的年龄。谢谢
-
请把你的问题简单化。
-
我可以使用#session.person.perAge 显示年龄,但如果我在 JSP 上更改年龄,则该年龄不会设置为会话。
标签: struts2 session-variables textfield