如何迭代<s:iterator>中的会话?

问题描述 投票:0回答:2
struts2 httpsession
2个回答
0
投票

不需要迭代器。
在您的操作中将值设置为会话属性。
在 Jsp 中使用名称检索它们 例如:

Name:<s:property value="#session.a" /><br>
Age:<s:property value="#session.b" /> <br>
Marks:<s:property value="#session.c" /><br>
Country:<s:property value="#session.d" /> 

这应该可以。

更新1:

用于显示所有输入的值集:
1) 创建一个

POJO
来存储所有这些值(调用
Person
)。
2) 在你的行动中保持
arraylist of Person
物体。
3)每次提交时创建一个新的人员对象并将其添加到人员列表中。
4)在jsp中迭代人员列表并显示所有值。
无需会议。尽可能避免使用会话。


0
投票

在 JSP 和实际操作中,您正在处理对象或对象数组。使用什么结构并不重要,重要的是对象具有

Name
Age
Marks
Country
等属性,并且它们属于名为
Person
的一个实体。

 @Entity
 public class Person {
   @Id
   @GeneratedValue
   private int id;
   private String name;
   public int getId() {
     return id;
   }
   public void setId(int id) {
     this.id = id;
   }
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this.name = name;
   }
   ...
   //other fields
} 

现在,会话应该包含许多此类对象,因此您应该创建一个列表并将其放入会话中。

public List<Person> getPersonList() {
  List<Person> personList = (List<Person>) session.get("personList");
  if (personList == null) {
    personList = new ArrayList<Person>();
    session.put("personList", personList);
  }
  return personList;
}

然后,在操作中,您应该有一个映射到表单字段的对象,该对象在提交时保存到会话中。这是同一个

Person
对象。

private Person person = new Person();
//public getters and setters

现在地图形式

<s:form action="verify">
  <s:textfield name="person.name" label="Enter Username" /><br>
  <s:textfield name="person.age" label="Enter Age" /><br>
  <s:textfield name="person.marks" label="Enter Marks" /><br>
  <s:textfield name="person.country" label="Enter Country" /><br> 
  <s:submit value="Click" id="submit"  /> 
</s:form>

此表单不会显示值(因为值映射到操作属性

Person
并且它是空的)

如何填写

personList
我已经在上一个例子中解释过。 现在要从中迭代值(人员),即在会话中使用

<s:iterator value="#session.personList">
  Name:<s:property value="name" /><br>
  Age:<s:property value="age" /> <br>
  Marks:<s:property value="marks" /><br>
  Country:<s:property value="country" /><br>
</s:iterator>
© www.soinside.com 2019 - 2024. All rights reserved.