避免在更改标签后向上滚动JSF PrimefaceselectCheckboxMenu组件



当我们使用向下滚动来选择素数的一个选项时,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来刷新此组合的标签。

有人知道要解决的解决方案吗?

  1. 更新后Javascript滚动重新定位
  2. 有什么方法可以避免刷新滚动
  3. 有没有办法在没有更新组件的情况下更新组合标签
  4. 其他JSF库的其他组件

我的B计划是从Java代码更新关联的outputLabel的文本,以避免这种行为。

提前感谢您!

问候

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

相关内容

  • 没有找到相关文章

最新更新