Как проверить переключатель в соответствии со значением, полученным из базы данных?

У меня есть страница JSP, где я сохраняю форму и значение выбранного переключателя в базе данных. Теперь мне нужно обновить эту страницу, все отображается, но переключатель не выбран. Я не знаю, как показать ранее выбранный переключатель на моем jsp. Я использую Struts2, Java.

JSP-код:

    <div id="patientCondition">
            <input type="radio" id="new" value="n" name="pSB.radioInnerSubjective" /><label for="new">New</label>
            <input type="radio" id="noChange" value="nC" name="pSB.radioInnerSubjective" /><label for="noChange">No Change</label> 
            <input type="radio" id="progressing" value="p" name="pSB.radioInnerSubjective" /><label for="progressing">Progressing</label>
            <input type="radio" id="notProgressing" value="nP" name="pSB.radioInnerSubjective" /><label for="notProgressing">Not Progressing</label>
    </div>

Предположим, я получаю значение переключателя как «nC» из базы данных, теперь как мне автоматически выбрать второй переключатель.

Я пытался:

<input type="radio" id="new" value="n" <s:if test="${patientSoapBean.radioInnerSubjective == 'n'}">CHECKED</s:if> name="patientSoapBean.radioInnerSubjective"/><label for="new">New</label>

Но я получаю ошибку:

Mar 28, 2013 6:07:54 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /WEB-INF/views/patient_soap.jsp (line: 703, column: 44) According to TLD or attribute directive in tag file, attribute test does not accept any expressions

person anshulankush    schedule 29.03.2013    source источник
comment
Я думаю, мне нужно добавить к этому условия, но я не знаю синтаксиса.   -  person anshulankush    schedule 29.03.2013
comment
Кода недостаточно для полного ответа. Когда вы перебираете различные возможные ответы, вам нужно проверить, установлено ли сохраненное значение, которое вы извлекли из базы данных, на значение текущего ответа. Когда это так, вам нужно добавить checked='checked' к входному тегу переключателя. Есть много способов сделать это.   -  person Marvo    schedule 29.03.2013
comment
Можете ли вы указать мне правильный синтаксис. так как мне трудно понять это. Я проверил, когда я получаю значения из базы данных, это отражает pSB.radioInnerSubjective='nC', но второй вариант (который для 'nC' не проверяется.). Пожалуйста, помогите мне с этим.   -  person anshulankush    schedule 29.03.2013
comment
Можете ли вы показать больше своего кода, пожалуйста? Например, как вы получаете ответ?   -  person Marvo    schedule 29.03.2013
comment
Я использую ${} для получения значения из класса действий через стек значений. например <input value="${pSB.patientID }" style="display: none" name="pSB.patientID"></input>   -  person anshulankush    schedule 29.03.2013
comment
Хм. Вы используете правильный префикс для тега <s:if>? Соглашение обычно <c:if>, но, я полагаю, это не обязательно. То, что я вижу, выглядит достаточно правильно (хотя я думаю, что это должно быть checked='checked'.)   -  person Marvo    schedule 29.03.2013
comment
Я свой Jsp определил следующим образом: <%@taglib uri="/struts-tags" prefix="s"%>   -  person anshulankush    schedule 29.03.2013
comment
Я также добавил ошибку в свой вопрос, который я получаю   -  person anshulankush    schedule 29.03.2013
comment
Аааа. Я предполагал теги JSTL. Я не знаком с тегами struts, но быстрый поиск в Google показывает множество примеров использования % вместо $ для префикса выражения. $ для JSTL. Кроме того, я ожидаю, что если вы используете теги Struts для входных тегов, они будут обрабатывать такие вещи, как автоматическая проверка переключателей.   -  person Marvo    schedule 29.03.2013
comment
я пытался, но все еще не выбрал свой переключатель ` ‹input type=radio id=new value=n ‹s:if test=%{pSB.radioInnerSubjective == 'n'}›checked=checked ‹/s:if› name=pSB.radioInnerSubjective/›‹label for=new›New‹/label› `   -  person anshulankush    schedule 29.03.2013
comment
Вы также можете вывести значение pSB.radioInnerSubjective, чтобы увидеть, совпадет ли оно на самом деле.   -  person Marvo    schedule 29.03.2013
comment
Я тоже пробовал это в текстовом поле, отображающем «n» для приведенного выше случая, что правильно. Проблема в том, что <s:if test="%{patientSoapBean.radioInnerSubjective=='n'}"> checked="checked" </s:if> не выполняется правильно   -  person anshulankush    schedule 29.03.2013
comment
У меня нет идей. Прости.   -  person Marvo    schedule 29.03.2013
comment
это также может быть проблема с браузером.. попробуйте сделать именно так   -  person Code2Interface    schedule 29.03.2013


Ответы (1)


Вы не можете использовать ${...} внутри тегов Struts2, и вам нужно поменять местами ' и " в атрибуте test, чтобы правильно сравнить с одной строкой символов.

<input type="radio" id="new" value="n" <s:if test='patientSoapBean.radioInnerSubjective == "n"'>checked</s:if> name="patientSoapBean.radioInnerSubjective"/>
<label for="new">New</label>

И, конечно, вам нужны геттеры/сеттеры для patientSoapBean и radioInnerSubjective.

Кстати, Struts2 имеет тег <s:radio>, который будет проверять выбранный переключатель.

person Aleksandr M    schedule 29.03.2013