selectBooleanCheckbox中javascript函数的参数已损坏
我们有一个表,每行有selectBooleanCheckbox中javascript函数的参数已损坏,javascript,jsf,jsf-2,richfaces,selectbooleancheckbox,Javascript,Jsf,Jsf 2,Richfaces,Selectbooleancheckbox,我们有一个表,每行有h:selectBooleanCheckbox(复选框表示boolean)。我们希望在更改复选框值(在任何行中)时调用backingbean操作 以下代码的工作方式很有趣:如果ID号(第一列的参数-字符串--用作javascript参数)很短(10个字符),则javascript参数是正确的,如果ID号更长(18个字符),则javascript参数不是-值被部分销毁(前16个字符是正确的,17和18个字符替换为0) XHTML: <rich:dataTable
h:selectBooleanCheckbox
(复选框表示boolean
)。我们希望在更改复选框值(在任何行中)时调用backingbean操作
以下代码的工作方式很有趣:如果ID号(第一列的参数-字符串-
-用作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>
环境:JSF2.1和RichFaces4.3。
在这个环境中,a4j:ajax
,f:ajax
,h:selectBooleanCheckbox
都没有action
属性。这意味着应该调用javascript
有人能告诉我如何在重复结构(表或列表的行)中使用参数(不同于复选框对象)正确调用javascript(根据onclick
或onchange
)吗
我可以用额外的命令按钮或用命令链接替换h:selectBooleanCheckbox来轻松解决这个问题(里面有两张图片选中/取消选中)。但我想知道这里是否有使用h:selectBooleanCheckbox
的有效解决方案
onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;"
您将其打印为JavaScript数字类型变量。与Javaint
一样,它也有技术限制。对于JavaScript,它是
最好把它打印成字符串
onclick="alert('#{pi.idNumber}');"
onchange="alert('ID number: #{pi.idNumber}'); return false;"
请注意,EL在服务器端运行(生成HTML/JS输出时),而不是在客户端运行,因此无需将其“字符串连接”到JavaScript变量中。非常好。谢谢你,BalusC。我没有包装#{pi.idNumber}使用单引号,因为它是字符串,但这仅在Java中是正确的,在JavaScript中不是。有了这个小改动,一切都很好。再次感谢。
onclick="alert('#{pi.idNumber}');"
onchange="alert('ID number: #{pi.idNumber}'); return false;"