避免在更改标签后向上滚动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的标签是组合。

有人知道任何解决方案来解决?

    更新
  1. 任何方式后
  2. 的Javascript滚动重新定位,以避免刷新卷轴?
  3. 任何方式来更新组合标签没有更新组件?
  4. 其他JSF库的其他组件?

我的B计划是从Java代码更新相关文本outputLabel以避免此行为。

非常感谢你提前!

Regards

+0

更新它的客户端?因此,删除组件的更新和未完成计数所选项目的客户端数量(也许该组件有一个javascript API),并通过javascript更新标签 – Kukeltje

+0

谢谢@Kukeltje!我已经找到了用JavaScript来做到这一点的方法。 – carlosyague

最后,我在@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> 
+0

当您取消选择某件商品时,此功能适用于您吗?对我来说,这似乎只有选择项目才有效。 – lazlev

+0

这是6.1.5版本中一个特定的错误(https://github.com/primefaces/primefaces/issues/2734)... – lazlev