我正在使用struts。如何使用iterate标记创建一个表行,当每个迭代使用不同的列表时,该行遍历名字和姓氏?
<logic:iterate name="fName" id="listMsgId1">
<tr>
<td>First Name: <bean:write name="listMsgId1"/></td>
<logic:iterate name="lName" id="listMsgId2" >
<td>Last Name: <bean:write name="listMsgId2"/></td>
</logic:iterate>
</tr>
</logic:iterate>
目前我得到的输出是名字:juan姓:brown姓:smith 名字:ken姓:brown姓:smith
我希望姓氏只针对每个名字出现一次,而不是针对创建的那么多行。
答案 0 :(得分:1)
在操作中创建一个正确的数据结构,并传递它而不是两个列表。
答案 1 :(得分:1)
@Dave答案是正确的,虽然这可能会对您有所帮助,
您应该创建包含2个属性的ActioForm
。
public class PersonDetail extends ActionForm
{
protected String firstName;
protected String lastName;
public void setFirstName(String newFirstName) {
firstName = newFirstName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String newLastName) {
lastName = newLastName;
}
public String getLastName() {
return lastName;
}
}
现在根据要求进行迭代,假设您的操作类中PersonDetail
为ArrayList
。
<logic:iterate name="PersonDetail" id="listUsers">
<tr>
<td>First Name: <bean:write name="listUsers" property="FirstName"/></td>
<td>Last Name: <bean:write name="listUsers" property="LastName"/></td>
<tr>
</logic:iterate>
答案 2 :(得分:0)
作为旁注,您可以轻松地使用hashmap。 在java类中,您将创建一个hashap,代码将类似于
HashMap<String,String> myMap = new HashMap();
myMap.put("DummyFirstName", "DummyLastName");
myMap.put("raheel","arif");
myMap.put("dave","newton");
request.setAttribute("SubscribedLists", myMap);
和jsp页面代码将是
<logic:iterate name="SubscribedLists" id="SubscribedListsId">
<div>
<p><bean:write name="SubscribedListsId" property="key"/></p>
</div>
<div>
<p><bean:write name="SubscribedListsId" property="value"/></p>
</div>
</logic:iterate>
在我的示例中,我使用了div,您可以轻松地将其转换为代码表