1

我们在每一行都有表格h:selectBooleanCheckbox(复选框代表boolean)。我们想在更改复选框值(在任何行中)时调用支持 bean 操作。

以下代码以有趣的方式工作:如果 ID 号(来自第一列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 函数被替换为 trivial alertonclick从哪个属性或onchange调用 javascript无关紧要- 结果是相同的:当字符串长度为 18 时,#{pi.idNumber} 的最后 2 个字符被 0 替换。

h:commandButton与用于删除行时的参数完全相同。用这部分替换后h:commandButton工作正常(参数正确)。以下是不正确的工作代码:a4j:commandLinka4j:param

    <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(peronclickonchangein )吗?h:selectBooleanCheckbox

我可以通过附加命令按钮轻松解决这个问题,或者用命令链接替换 ​​h:selectBooleanCheckbox(内部有 2 个图像检查/取消检查)。但我想知道是否有有效的解决方案h:selectBooleanCheckbox

4

1 回答 1

1

这里,

onclick="alert(#{pi.idNumber});"
onchange="alert('ID number: ' + #{pi.idNumber}); return false;"

您将其打印为 JavaScript 数字类型变量。与 Java 一样int,它也有技术限制。对于 JavaScript,它是2 53 (9007199254740992)

最好将其打印为字符串。

onclick="alert('#{pi.idNumber}');"
onchange="alert('ID number: #{pi.idNumber}'); return false;"

请注意,EL 在服务器端运行(同时生成 HTML/JS 输出),而不是在客户端,因此无需将其“字符串连接”到 JavaScript 变量中。

于 2015-01-22T07:45:40.730 回答