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数字类型变量。与Java
int
一样,它也有技术限制。对于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;"