javascript - 如何确保只有一个h :selectOneRadio button is selected

标签 javascript jsf jsf-2

我有一些 JavaScript 代码(我从 BalusC 借来的),用于确保在表格中只选择一个 h:selectOneRadio 按钮。不幸的是,我从 glassfish 服务器收到格式错误的表达式错误:

Error Parsing /ClientSearch.xhtml: Error Traced[line: 13] The content of elements must consist of well-formed character data or markup.

注意:

 if (elements[i].name.substring(elements[i].name.lastIndexOf(':')) == id) {

似乎是有问题的线路

我也不完全理解javascript(我是新手),我希望有人可以向我解释它。

这是完整的 JavaScript:

 function dataTableSelectOneRadio(radio) {
    var id = 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(':')) == id) {
            elements[i].checked = false;
        }
    }
    radio.checked = true;
}
 </script>  

为什么我会收到错误消息? 而且,剧本本身似乎是错误的。代码不应该是 if NOT equal to id then false (如下所示)。

 if (elements[i].name.substring(elements[i].name.lastIndexOf(':')) != id) {
    elements[i].checked = false;
 }

显然我不明白。

这是该表的 Facelets 代码: 客户

        <h:column headerText="First Name"  >
            <f:facet name="header"><h:outputText value="First Name" /></f:facet>
            #{client.firstName}
        </h:column>
        <h:column headerText="Last Name"  >
            <f:facet name="header"><h:outputText value="Last Name" /></f:facet>
            #{client.lastName}
        </h:column>

        <h:column headerText="Select"  >
            <f:facet name="header"><h:outputText value="Last Name" /></f:facet>
            <h:selectOneRadio valueChangeListener="#{clientSearchBean.setSelectedItem}" >
                <f:selectItem itemValue="null" />
            </h:selectOneRadio>
        </h:column>

        <h:column headerText="Address"  >
            <f:facet name="header"><h:outputText value="Address" /></f:facet>
            #{client.address}
        </h:column>
        <h:column headerText="Cell"  >
            <f:facet name="header"><h:outputText value="Cell" /></f:facet>
            #{client.cell}
        </h:column>
        <h:column headerText="Phone"  >
            <f:facet name="header"><h:outputText value="Phone" /></f:facet>
            #{client.phone}
        </h:column>

    </h:dataTable>      

最佳答案

我已经尝试过(并且正在使用) <h:dataTable> 中的 BalusC 代码并且工作整洁。您有两个问题:

  1. 您根本没有使用 JavaScript 函数(或者在您的代码中看到的函数):

    <h:column headerText="Select">
        <f:facet name="header">
            <h:outputText value="Last Name" />
        </f:facet>
        <!-- you forgot to add the onclick -->
        <h:selectOneRadio valueChangeListener="#{clientSearchBean.setSelectedItem}"
            onclick="dataTableSelectOneRadio(this);">
            <f:selectItem itemValue="null" />
        </h:selectOneRadio>
    </h:column>
    
  2. 您的 JavaScript 代码具有 <象征。 Facelets 对这个符号的使用非常严格。要使其正常工作,您应该使用 XML CDATA用法 Script and Style elements :

    <script type="text/javascript">
    //the CDATA must be used with JavaScript comments
    //<![CDATA[
        function dataTableSelectOneRadio(radio) {
            var id = 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(':')) == id) {
                    elements[i].checked = false;
                }
            }
            radio.checked = true;
        }
    //]]>
    </script>
    

关于javascript - 如何确保只有一个h :selectOneRadio button is selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077922/

相关文章:

javascript - 在弹出窗口中使用javascript问题

javascript - 来自数据库的依赖下拉列表值

ajax - 带有浏览器历史记录/标签的 PrimeFaces Ajax 导航

jsf - 如何在 JSF 中实现登录过滤器?

jsf - 如何将参数化的MessageFormat与JSF组件的非Value属性一起使用

php - Javascript 屏幕宽度/高度到 PHP

javascript - Node读取ts模块/读取代码文件

java - 变富 :simpleTogglePanel header style

jsf-2 - 为 Datatable primefaces 设置列宽

jsf - 在 p :dataTable 上使用自定义全局过滤器