避免在更改标签后向上滚动JSF primefaces selectCheckboxMenu组件
问题描述:
当我们选择使用向下滚动的primefaces selectCheckboxMenu的选项时,更改侦听器之后,组件被更新并滚动到上并且这种行为似乎是错误的。避免在更改标签后向上滚动JSF primefaces 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侦听
public void populateLabel() {
label = (selectedItemIds != null && selectedItemIds.size() > 0)
? selectedItemIds.size() + " selected." : "Select";
}
的java的监听器更改标签的价值,但我们需要更新selectCheckboxMenu到刷新th的标签是组合。
有人知道任何解决方案来解决?
-
更新
- 任何方式后
- 的Javascript滚动重新定位,以避免刷新卷轴?
- 任何方式来更新组合标签没有更新组件?
- 其他JSF库的其他组件?
我的B计划是从Java代码更新相关文本outputLabel以避免此行为。
非常感谢你提前!
Regards
答
最后,我在@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>
更新它的客户端?因此,删除组件的更新和未完成计数所选项目的客户端数量(也许该组件有一个javascript API),并通过javascript更新标签 – Kukeltje
谢谢@Kukeltje!我已经找到了用JavaScript来做到这一点的方法。 – carlosyague