2013-04-27 5 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"/> 

В этом коде «вопросы» - это список, содержащий объекты вопросов со строковым вопросом, 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) на карту, а затем поместил эту карту в сеанс под названием «карта».

В коде выше, я использую

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

в HTML радио теге. Я жестко закодировал идентификатор вопроса (qid) как «1», и он работает так, как планировалось. Но число в get() должно быть переменной. Это должно быть реальный вопрос идентификатор, как я использовал в

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); 

В этом примере первое радио будет проверено и второе не отмечено из-за значений карты сеанса.

Элементы ввода формы привязаны к действию по их именам. Если вам нужно получить значения, когда вы отправляете форму, вам нужно использовать индексированные имена свойств.