我们在每一行都有表格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 alert
。onclick
从哪个属性或onchange
调用 javascript无关紧要- 结果是相同的:当字符串长度为 18 时,#{pi.idNumber} 的最后 2 个字符被 0 替换。
h:commandButton
与用于删除行时的参数完全相同。用这部分替换后h:commandButton
工作正常(参数正确)。以下是不正确的工作代码:a4j:commandLink
a4j: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(peronclick
或onchange
in )吗?h:selectBooleanCheckbox
我可以通过附加命令按钮轻松解决这个问题,或者用命令链接替换 h:selectBooleanCheckbox(内部有 2 个图像检查/取消检查)。但我想知道是否有有效的解决方案h:selectBooleanCheckbox
。