1
<input type="radio" name="${questions.qid}" value="${questions.ans1}" 
  <s:if test="%{(#session.map.get(1)).equals(\'ans1\')}">checked</s:if>>
<s:property value="#attr.questions.ans1"/>

在此代码questions中是一个列表,其中包含问题对象

String question,ans1,ans2,ans3;

在我的程序中,我会让它出现在浏览器中

Question 1
(RadioButton) Answer 1
(RadioButton) Answer 2
(RadioButton) Answer 3

Question 2
(RadioButton) Answer 1
(RadioButton) Answer 2
(RadioButton) Answer 3

.
.
.

该列表可能包含多个问题对象,因此我将其设置为每页显示 5 个问题。我的问题是(例如)用户可能从第 4 页转到第 2 页,我想重新填写用户在第 2 页中单击的答案。所以在操作类中,我创建了一个HashMap问题 ID(qid)并回答了问题(例如ans2)放入地图,然后将此地图放入名为map.

在上面的代码中,我使用

<s:if test="%{(#session.map.get(1)).equals(\'ans1\')}">checked</s:if>

在 HTML 单选标记中。我将问题 id ( qid) 硬编码为1,它按计划工作。但是中的数字get()必须是可变的。那一定是我在

name="$(questions.qid)"

我尝试将参数设置为

#session.map.get(#attr.questions.qid)

但它不起作用。如何使参数可变?

4

1 回答 1

1

要填充您的问题,您需要使用s:iterator标签

<s:iterator value = "myQuestions" status="key">
  <s:textfield name = "myQuestions[%{#key.index}].name" /><br>
  <input type="radio" name="myQuestions[<s:property value="%{#key.index}"/>].ans1" value="<s:property value="%{myQuestions[#key.index].ans1}"/>" <s:if test="%{(#session.map.get(myQuestions[#key.index].name)).equals(myQuestions[#key.index].ans1)}">checked</s:if>><s:property value="%{myQuestions[#key.index].ans1}"/><br>
</s:iterator>

在行动中按名称使用地图问题(相当于你的qid

Map<String, String> map = new HashMap<String, String>();

根据您的描述创建的问题类。

public class Question {
    private  String name;
    private  String ans1;
    private  String ans2;
    private  String ans3;

    //getters setters here
}

private List<Question> myQuestions;
//getters setters here for questions

确保在返回结果之前初始化问题。

public String execute(){
  myQuestions = new ArrayList<Question>();
  myQuestions.add(new Question("Question1", "ans1", "ans2","ans3"));
  myQuestions.add(new Question("Question2","ans1", "ans2","ans3"));

  //test results, map should not be empty
  map.put("Question1", "ans1");
  map.put("Question2", "ans2");
  session.put("map", map);

在此示例中,由于会话映射值,第一个无线电将被选中,第二个未选中。

表单的输入元素通过它们的名称绑定到动作。如果您需要在提交表单时获取值,则需要使用索引属性名称。

于 2013-04-27T17:04:40.240 回答