1

テーブルでh:selectOneRadioボタンが1つだけ選択されていることを確認するために使用されるJavaScriptコード(BalusCから借りたもの)があります。残念ながら、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>  

なぜエラーが発生するのですか?そして、スクリプト自体が間違っているようです。コードがidと等しくない場合はfalseにすべきではありません(以下のように)。

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

明らかに私は理解していません。

そして、これがテーブルのファセットコードです:クライアント

        <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>      
4

1 に答える 1

1

私はBalusCコードを試してみました(そして使用しています)<h:dataTable>。2つの問題があります。

  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は非常に厳密です。これを機能させるには、スクリプト要素とスタイル要素でXMLCDATAの使用法を使用する必要があります。

    <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>
    
于 2012-08-22T18:58:36.017 に答える