Мой вопрос связан с jsf.Как выбрать только одну радиокнигу из полной строки в <h:dataTable> в jsf?
Я пытаюсь сделать jsf dataTable с переключателями.
См., Например, В первой строке есть 5 столбцов: в первом столбце есть вопрос, а остальные 4 - радиокнопки. Я хочу, чтобы пользователь выбирал только одну радиокнопку из 4 в одной строке и повторял тот же процесс для всех строки.
Я прочитал ссылку, где Javascript код дается для выбора одной строки с помощью радио-кнопки: How to group Radio Buttons in h:datatable jsf2.0 и http://www.javabeat.net/how-to-use-hselectoneradio-inside-hdatatable-in-jsf/
Но мое требование, чтобы выбрать один из кнопки радио в строке
У меня есть некоторые подсказки здесь: http://www.javaworld.com/article/2077687/enterprise-java/group-radio-buttons-inside-a-jsf-datatable-component.html, но я предпочел бы код javascript для выполнения этой операции, а не для создания пользовательского тега, если это возможно. Или если есть другой способ сделать то же самое в чистом jsf.
Edit:
код в JSP:
<h:dataTable var="row" value="#{rateYourBillerBean.questionsList}">
<h:column>
<f:facet name="header">
<h:outputText value="Question" />
</f:facet>
<h:outputText value="#{row.question}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Poor" />
</f:facet>
<h:selectOneRadio styleClass="rad" onclick="uncheckOthers(this)" value="#{row.poor}">
<f:selectItem itemValue="1" />
</h:selectOneRadio>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Average" />
</f:facet>
<h:selectOneRadio styleClass="rad" onclick="uncheckOthers(this)" value="#{row.average}">
<f:selectItem itemValue="2" />
</h:selectOneRadio>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Good" />
</f:facet>
<h:selectOneRadio styleClass="rad" onclick="uncheckOthers(this)" value="#{row.good}">
<f:selectItem itemValue="3" />
</h:selectOneRadio>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Excellent" />
</f:facet>
<h:selectOneRadio styleClass="rad" onclick="uncheckOthers(this)" value="#{row.excellent}">
<f:selectItem itemValue="4" />
</h:selectOneRadio>
</h:column>
</h:dataTable>
JS:
<script>
function uncheckOthers(radio) {
var name = radio.name.substring(radio.name.lastIndexOf(':'));
var elements = radio.form.elements;
for (var i = 0; i < elements.length; i++) {
if (elements[i].name.substring(elements[i].name.lastIndexOf(':')) == name) {
elements[i].checked = false;
}
}
radio.checked = true;
}
</script>
Проблема заключается в том, что каждая кнопка радио в последовательных строках имеют одинаковое значение для radio.name.substring(radio.name.lastIndexOf(':'))
но переключатели в той же строке не имеют того же имени, что и в «Просмотр источника» браузера. Итак, как преодолеть это.
Если вы попробовали это, покажите код, с которым вы работали, это поможет определить, какую ошибку вы можете совершить. – miqdadamirali
@ miqdadamirali, я добавил код –