【发布时间】:2016-04-05 19:33:40
【问题描述】:
我的问题与jsf有关。
我正在尝试制作一个带有单选按钮的 jsf 数据表。
例如 在第一行中,有 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 中有另一种方法可以做到这一点。
编辑:
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,我添加了代码
标签: javascript jsf-1.2