2013-04-27 86 views
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。在我的計劃,我會讓它出現在瀏覽器,如如何將變量放入OGNL標記

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),然後將該地圖放入名爲「地圖」的會話中。

在上面的代碼中,我在HTML無線標籤使用

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

。我將問題ID(qid)硬編碼爲「1」,並按計劃運行。 但get()中的數字必須是可變的。那一定是真正的問題ID就像我在

name="$(questions.qid)" 

使用我試圖把參數作爲

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

,但它不工作。請引導我如何使參數變量。

回答

1

要填充您的問題,您需要使用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); 

在這個例子中,第一個無線電將被檢查,第二個無線電由於會話映射值而被選中。

形式的輸入元件被結合到由它們的名稱的動作。如果您在提交表單時需要獲取值,則需要使用索引屬性名稱。