如何根据迭代器值预选 Struts 迭代器内的单选按钮?

How to preselect a radio button inside of a Struts iterator based on the iterator value?

我在 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 字段,但 <s:radio> 标记中的 value="indicatorFlag" 未预选单选按钮,即使它确实在第二行的 <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 ");
}

这里是定义对象的代码RefQuestionInfoindicatorFlag是本题唯一涉及的字段)

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 预选“是”或“否”单选值。

您的所有单选按钮名称相同,这意味着您只能选择其中一个。使用迭代器 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>

请注意,您在上面的代码中的动作和 RefQuestionInfo 中有同名变量 indicatorFlag,将使用 RefQuestionInfo 中的变量。