更改标签

时间:2016-07-29 10:30:17

标签: jsf primefaces scroll label selectcheckboxmenu

当我们使用向下滚动选择主要 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 以刷新此组合的标签。

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

  1. 更新后Javascript滚动重新定位
  2. 什么方法可以避免刷新滚动?
  3. 如何更新没有更新组件的组合标签?
  4. 其他JSF库的其他组件?
  5. 我的B计划是从Java代码更新相关 outputLabel 的文本,以避免此行为。

    提前非常感谢你!

    此致

1 个答案:

答案 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>