我有一些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>
为什么我收到错误? 并且,脚本本身似乎是错误的。如果NOT等于id则不应该是代码,然后是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>
答案 0 :(得分:1)
我已尝试(我正在使用)<h:dataTable>
中的BalusC代码并且工作正常。你有两个问题:
您根本没有使用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>
您的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>