【问题标题】:How to enable/disable specific item in selectManyCheckbox on ajax keyUp如何在 ajax keyUp 上的 selectManyCheckbox 中启用/禁用特定项目
【发布时间】:2015-09-22 17:09:49
【问题描述】:

在基于 ajax 调用 keyup 启用/禁用 selectManyCheckbox 组件中的特定项目时,我需要您的帮助。

当页面加载时,我正在触发以下方法来填充表单中的selectManyCheckbox 项:

 @PostConstruct

    public void init() throws SQLException {

    this.hrCertificatesList.add(new hrCertificate(("Employment"), "CE", false));

    this.hrCertificatesList.add(new hrCertificate(("Loan"), "LC", false));

}

这里是jsf代码:

  <p:inputText id="selectedEmployee" value="#{HRRequest.selectedEmployeeCode}">

     <p:ajax event="keyup" update="employeeName" listener="#{HRRequest.getEmployeeName}" />

   </p:inputText>

<h:outputText id="employeeName" value="#{HRRequest.selectedEmployeeName}" />

<p:selectManyCheckbox id="hrCertificates" value="#{HRRequest.selectedHRCertificates}">
 <f:selectItems value="#{HRRequest.hrCertificatesList}" var="hrCertificate" 
itemLabel="#{hrCertificate.hrCertificateName}"
    itemValue="#{hrCertificate.hrCertificateCode}" itemDisabled="#{hrCertificate.hrBooleanCertificate}"/>

    </p:selectManyCheckbox>

页面加载后,所有复选框均已启用,当用户在inputText 中输入employeeCode 时,将触发一个ajax 来调用获取employeeName 的方法并检查是否有贷款,如果有贷款,则复选框应启用,否则禁用。

总结一下我的问题,我想要的是当变量temp的值等于yes时,我只需要禁用loan复选框,而另一个项目Employment应该保持启用,那么我该怎么做呢?

bean代码是:

 public String getEmployeeName() throws SQLException {
     if (temp.equals("Yes"))
{ 
//How to enable and disable the Loan checkbox only and to update the form view
RequestContext.getCurrentInstance().update(":HRform:hrCertificates");    
}

那么请你帮忙。

【问题讨论】:

  • @BalusC 我已经编辑了主题,使其更清晰,并解释了更多代码,请您指导和协助
  • @BalusC hrBooleanCertificate 我在 hrCertificate 类中定义了它。 hrBooleanCertificate 指的是 init() 方法中的 boolean false,在该方法中,一开始所有复选框都应启用,但随后我不知道下一步该做什么来设置 Loan item disabled
  • 所以你的意思是我应该在我的 bean 中定义一个名为 hrBooleanCertificate 的新布尔变量,并在默认情况下将其初始化为 false,然后在 IF 语句中根据条件,然后更新组件?这只会对贷款复选框进行吗?
  • @BalusC 以上正确吗?

标签: ajax list jsf primefaces selectmanycheckbox


【解决方案1】:

只需以itemDisabled="#{hrCertificate.hrBooleanCertificate}" 评估true 而不是false 的方式操作模型,以便视图知道它必须做什么。

一种方法可能是:

this.hrCertificatesList.get(1).setHrBooleanCertificate(true);

【讨论】:

  • 我明天试试这个,然后回来找你。还有一件事,我应该更新@form 吗?
  • 如果您想反映模型中的更改,您确实应该更新视图。
  • 感谢助手和帮助。效果很好,太棒了
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2012-02-19
  • 2015-09-24
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多