我在Struts2 <s:iterator>
标记内部有以下代码行。
<s:radio name="indicatorFlag" list = "seqNoMap" value="indicatorFlag" /></div>
<div><s:property value = "indicatorFlag"/></div>
我的操作页面上定义了seqNoMap
,如下所示。
seqNoMap = new HashMap<String, String>();
seqNoMap.put("Y", " Yes ");
seqNoMap.put("N", " No ");
单选按钮显示在我的页面上,并将选择信息传递回操作页面上的indicatorFlag
字段,但value="indicatorFlag"
标记中的<s:radio>
未预先选择收音机按钮,即使它确实在第二行的<s:property>
标签中打印出Y或N.当迭代器遍历列表时,indicatorFlag
会更改值(它是迭代列表中对象的字段)。我找到了几个回答这个问题的地方,我想我正在应用他们给出的答案,但显然我错过了一些东西。任何帮助将不胜感激。
以下是RefQuestionAction
操作页面的相关代码。
private HashMap<String, String> seqNoMap;
private List<RefQuestionInfo> questionInfoList;
private String indicatorFlag; // Char (1) flag
public RefQuestionAction(){
seqNoMap = new HashMap<String, String>();
seqNoMap.put("Y", " Yes ");
seqNoMap.put("N", " No ");
}
以下是定义对象RefQuestionInfo
的代码(indicatorFlag
是此问题中涉及的唯一字段。)
public class RefQuestionInfo extends BaseInfo implements Serializable {
private int questionId;
private int seqNo;
private String indicatorFlag;
private Date activeDate;
private Date inactiveDate;
private String question;
以下是<s:iterator>
标记内的Struts2代码。我已经删除了大部分页面代码,专注于我的问题。
<s:iterator value = "questionInfoList" var = "questionInfo">
<s:radio name="indicatorFlag" list = "seqNoMap" value="indicatorFlag" />
<div><s:property value = "indicatorFlag"/></div>
</s:iterator>
输出看起来像这样。
我希望根据单选按钮后面的行上的Y或N预先选择Yes或No无线电值。
答案 0 :(得分:2)
您的所有单选按钮具有相同的名称,这意味着您只能选择其中一个。使用迭代器status
为它们指定不同的名称。
<s:iterator value="questionInfoList" var="questionInfo" status="stat">
<s:radio name="indicatorFlag%{#stat.index}" list="seqNoMap" value="indicatorFlag" />
<div><s:property value="indicatorFlag" /></div>
</s:iterator>
请注意,您在内部代码中使用相同名称indicatorFlag
的变量,并且在上述代码中RefQuestionInfo
内部将使用RefQuestionInfo
内的变量。