selectBooleanCheckbox 中 javascript 函数的损坏参数
Damaged parameter of javascript function in selectBooleanCheckbox
我们有 table,每行有 h:selectBooleanCheckbox
(复选框代表 boolean
)。我们想在更改复选框值(在任何行中)时调用支持 bean 操作。
以下代码以有趣的方式工作:如果 ID 号(第 1 列的参数 - String
- 用作 javascript 的参数)很短(10 个字符),则 javascript 参数是正确的,如果 ID 号更长(18 个字符)则 javascript 参数不是 - 值被部分破坏(前 16 个字符是正确的,17 和 18 个字符被 0 替换)。
XHTML:
<rich:dataTable id="loyaltyIdTable"
rows="#{referenceData.recordsPerPage}"
rowClasses="oddrow, evenrow"
var="pi"
value="#{chProfile.loyaltyPIs}">
<rich:column>
<f:facet name="header">
<h:outputText value="ID Number" />
</f:facet>
<h:outputText value="#{pi.idNumber}" />
</rich:column>
<rich:column styleClass="centeralign">
<f:facet name="header">
<h:outputText value="Can Redeem" />
</f:facet>
<h:selectBooleanCheckbox value="#{pi.canRedeem}"
onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;" />
</rich:column>
<rich:column styleClass="centeralign">
<f:facet name="header">
<h:outputText value="Delete" />
</f:facet>
<a4j:commandLink execute="@this" render="deleteConfirmationPanel"
oncomplete="#{rich:component('confirmPopup')}.show()">
<h:graphicImage value="/images/delete.gif" style="border:none;" />
<a4j:param value="#{pi.idNumber}" assignTo="#{loyaltyIdForm.deleteId}" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
在这段代码中,我的 javascript 函数被普通的 alert
代替了。
从哪个属性 onclick
或 onchange
调用 javascript 并不重要 - 结果是相同的:#{pi.idNumber} 的最后 2 个字符被替换为 0 时字符串长度为 18.
与使用 h:commandButton
删除行时的参数完全相同。用 a4j:param
替换 h:commandButton
到 a4j:commandLink
后,这部分工作正常(参数正确)。以下是不正确的工作代码:
<h:commandButton value="#{msg.delete}"
action="#{chAction.deleteAltId(pi.idNumber)}"
onclick="return confirm('#{msg.deleteAltId} #{pi.idNumber}?')"
render="loyaltyIdTable" />
环境:JSF 2.1 和 RichFaces 4.3。
在此环境中,a4j:ajax
、f:ajax
、h:selectBooleanCheckbox
都没有 action
属性。这意味着应该调用 javascript。
有人可以向我解释如何在重复结构中使用参数(不同于复选框对象)正确调用 javascript(根据 onclick
或 h:selectBooleanCheckbox
中的 onchange
)( table 或列表的行)?
我可以通过添加命令按钮或用命令 link 替换 h:selectBooleanCheckbox 轻松解决这个问题(里面有 2 个图像 check/uncheck)。但我想知道 h:selectBooleanCheckbox
.
是否有可行的解决方案
这里,
onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;"
您将其打印为 Java脚本数字类型变量。和Javaint
一样,它也有技术上的限制。对于 JavaScript,它是 253 (9007199254740992)。
最好将其打印为字符串。
onclick="alert('#{pi.idNumber}');"
onchange="alert('ID number: #{pi.idNumber}'); return false;"
请注意,EL 在服务器端运行(同时生成 HTML/JS 输出),而不是在客户端运行,因此无需 "string-concatenate" 将其转换为 Java 脚本变量。
我们有 table,每行有 h:selectBooleanCheckbox
(复选框代表 boolean
)。我们想在更改复选框值(在任何行中)时调用支持 bean 操作。
以下代码以有趣的方式工作:如果 ID 号(第 1 列的参数 - String
- 用作 javascript 的参数)很短(10 个字符),则 javascript 参数是正确的,如果 ID 号更长(18 个字符)则 javascript 参数不是 - 值被部分破坏(前 16 个字符是正确的,17 和 18 个字符被 0 替换)。
XHTML:
<rich:dataTable id="loyaltyIdTable"
rows="#{referenceData.recordsPerPage}"
rowClasses="oddrow, evenrow"
var="pi"
value="#{chProfile.loyaltyPIs}">
<rich:column>
<f:facet name="header">
<h:outputText value="ID Number" />
</f:facet>
<h:outputText value="#{pi.idNumber}" />
</rich:column>
<rich:column styleClass="centeralign">
<f:facet name="header">
<h:outputText value="Can Redeem" />
</f:facet>
<h:selectBooleanCheckbox value="#{pi.canRedeem}"
onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;" />
</rich:column>
<rich:column styleClass="centeralign">
<f:facet name="header">
<h:outputText value="Delete" />
</f:facet>
<a4j:commandLink execute="@this" render="deleteConfirmationPanel"
oncomplete="#{rich:component('confirmPopup')}.show()">
<h:graphicImage value="/images/delete.gif" style="border:none;" />
<a4j:param value="#{pi.idNumber}" assignTo="#{loyaltyIdForm.deleteId}" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
在这段代码中,我的 javascript 函数被普通的 alert
代替了。
从哪个属性 onclick
或 onchange
调用 javascript 并不重要 - 结果是相同的:#{pi.idNumber} 的最后 2 个字符被替换为 0 时字符串长度为 18.
与使用 h:commandButton
删除行时的参数完全相同。用 a4j:param
替换 h:commandButton
到 a4j:commandLink
后,这部分工作正常(参数正确)。以下是不正确的工作代码:
<h:commandButton value="#{msg.delete}"
action="#{chAction.deleteAltId(pi.idNumber)}"
onclick="return confirm('#{msg.deleteAltId} #{pi.idNumber}?')"
render="loyaltyIdTable" />
环境:JSF 2.1 和 RichFaces 4.3。
在此环境中,a4j:ajax
、f:ajax
、h:selectBooleanCheckbox
都没有 action
属性。这意味着应该调用 javascript。
有人可以向我解释如何在重复结构中使用参数(不同于复选框对象)正确调用 javascript(根据 onclick
或 h:selectBooleanCheckbox
中的 onchange
)( table 或列表的行)?
我可以通过添加命令按钮或用命令 link 替换 h:selectBooleanCheckbox 轻松解决这个问题(里面有 2 个图像 check/uncheck)。但我想知道 h:selectBooleanCheckbox
.
这里,
onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;"
您将其打印为 Java脚本数字类型变量。和Javaint
一样,它也有技术上的限制。对于 JavaScript,它是 253 (9007199254740992)。
最好将其打印为字符串。
onclick="alert('#{pi.idNumber}');"
onchange="alert('ID number: #{pi.idNumber}'); return false;"
请注意,EL 在服务器端运行(同时生成 HTML/JS 输出),而不是在客户端运行,因此无需 "string-concatenate" 将其转换为 Java 脚本变量。