如何基于迭代器值预先选择Struts迭代器内的单选按钮?

时间:2015-12-08 20:52:09

标签: html jsp struts2 radio-button struts-tags

我在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> 

输出看起来像这样。

JSP page output

我希望根据单选按钮后面的行上的Y或N预先选择Yes或No无线电值。

1 个答案:

答案 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内的变量。