Struts2 如何在Struts 2中从JSP更新会话值

Struts2 如何在Struts 2中从JSP更新会话值,struts2,session-variables,textfield,Struts2,Session Variables,Textfield,我正在使用Struts2.0。我有一个javabean人,他有perName、perAge、perMail等字段。我想在JSP上显示JavaBean{[1,person1],[2,person2])的映射,并允许用户使用文本字段从同一个JSP更新它 例如,perName是不可编辑的,perAge是可编辑的。我不想显示不可编辑的字段。如果我只使用可编辑的文件,更新后,我将不可编辑的字段设置为null(更新后perName为null)。因此,我无法指定名称属性,因为它在运行时正在更改。因此,我将它们

我正在使用Struts2.0。我有一个javabean人,他有perName、perAge、perMail等字段。我想在JSP上显示JavaBean
{[1,person1],[2,person2])
的映射,并允许用户使用文本字段从同一个JSP更新它

例如,perName是不可编辑的,perAge是可编辑的。我不想显示不可编辑的字段。如果我只使用可编辑的文件,更新后,我将不可编辑的字段设置为null(更新后perName为null)。因此,我无法指定名称属性,因为它在运行时正在更改。因此,我将它们放在HTTP会话中并显示它们。我使用
#Session.person[迭代器索引]指定文本字段的名称属性.perAge
。到目前为止,一切正常。但如果我更改任何文本字段中的值并尝试更新,我将获得旧会话属性,而不是更改的属性。我希望旧会话属性具有新更改的值,并且不可编辑字段的值应在用户请求中保留。我不希望使用JavaScript.OGNL或expres这是最受欢迎的


public类PersonDTO实现可序列化{
私有字符串perName;
私人旅行;
公共字符串getPerName(){
返回perName;
}
public void setPerName(字符串perName){
this.perName=perName;
}
public int getPerAge(){
返回路径;
}
公共空间设置(内部设置){
this.perAge=perAge;
}
}

年龄:

感谢您的支持。在谷歌搜索了一天之后,我发现无法使用Struts标签直接更新会话。您可以使用会话信息在scriplets中显示和更新会话,但不能直接更新会话。您可以参考更多信息。再次感谢您的帮助!!!

请将您的代码放在您所拥有的位置到目前为止已实现?公共类PersonDTO实现可序列化的{private String perName;private int perAge;公共字符串getPerName(){return perName;}公共void setPerName(String perName){this.perName=perName;}公共int getPerAge(){return perAge;}公共void setPerAge(int perAge){this.perAge=perAge;}这是我的Person bean。我在JSP页面上显示:在action类中,将类放入会话时,HttpSession HttpSession=req.getSession(true);HttpSession.setAttribute(“Person”,perDTO);检索时,HttpSession HttpSession=req.getSession(true);PersonDTO sesDTO=(PersonDTO)HttpSession.getAttribute(“Person”);但我得到的是显示时设置的年龄,而不是在文本字段中编辑的年龄。谢谢,请简化您的问题。我可以使用#session.person.perAge显示年龄,但如果我在JSP上更改年龄,则该年龄不会设置为session。