当我们使用向下滚动选择主要 selectCheckboxMenu 的选项时,在更改侦听器之后,组件会更新并滚动到向上并且此行为似乎是错误的。
这是我的代码:
XHTML
<p:outputLabel for="profCat" value="Professional Category" />
<p:selectCheckboxMenu id="profCat" widgetVar="profCatW"
scrollHeight="175"
label="#{employeeForm.profCat.label}"
value="#{employeeForm.profCat.selectedItemIds}">
<p:ajax event="toggleSelect" update="profCat"
listener="#{employeeForm.profCat.populateLabel}"
oncomplete="PF('profCatW').show()" />
<p:ajax event="change" update="profCat"
listener="#{employeeForm.profCat.populateLabel}"
oncomplete="PF('profCatW').show()" />
<f:selectItems value="#{employeeForm.profCat.items}" var="label"
itemLabel="#{label.label}" itemValue="#{label.optionId}" />
</p:selectCheckboxMenu>
<p:message for="profCat" />
Java Listener
public void populateLabel() {
label = (selectedItemIds != null && selectedItemIds.size() > 0)
? selectedItemIds.size() + " selected." : "Select";
}
java侦听器更改标签值但我们需要更新 selectCheckboxMenu 以刷新此组合的标签。
有人知道要解决的任何解决方案吗?
我的B计划是从Java代码更新相关 outputLabel 的文本,以避免此行为。
提前非常感谢你!
此致
答案 0 :(得分:1)
最后,我在@Kukeltje的帮助下解决了这个问题。
我定义了这个javascript函数:
function populateLabel(widgetVar) {
var count = PF(widgetVar).inputs.filter(":checked").length;
var label = count + " selected";
PF(widgetVar).jq.find('.ui-selectcheckboxmenu-label').text(label);
}
在我的JSF代码中,我删除了对ajax侦听器的更新:
<p:ajax event="toggleSelect"
listener="#{employeeForm.profCat.populateLabel}"
oncomplete="populateLabel('profCatW')" />
<p:ajax event="change"
listener="#{employeeForm.profCat.populateLabel}"
oncomplete="populateLabel('profCatW')" />
在验证期间考虑错误情况:
<h:outputScript rendered="#{facesContext.validationFailed}">
populateLabel('profCatW');
</h:outputScript>