0

我正在尝试使用 f:selectItems 呈现一些复选框,但网页没有按预期显示复选框。请查看下面的代码,让我知道我缺少什么。

HTML:

    <h:form  prependId="false">
        <table align="left" cellspacing="5">
            <tr>
                <td align="right" valign="top"><h:outputText value="#{msgs.interests}" /></td>
                <td align="left" valign="top">
                    <h:selectManyCheckbox value="#{testBean.interests}">
                        <f:selectItems value="#{testBean.checkBoxItems}" />
                    </h:selectManyCheckbox>
                </td>
            </tr>
            <tr>
                <td align="right" valign="top"><h:commandButton value="#{msgs.save}" /></td>
                <td align="left" valign="top"><h:commandButton value="#{msgs.cancel}" /></td>
            </tr>
        </table>
    </h:form>

托管豆:

包 com.jsf.ManagedBeans;

导入 javax.inject.Named;导入 javax.faces.bean.RequestScoped;

导入 javax.faces.model.SelectItem;

@Named("testBean") @RequestScoped 公共类 TestBean {

private int[] interests;
private SelectItem[] checkBoxItems = {
    new SelectItem("Dancing", "Dancing"),
    new SelectItem("Singing", "Singing"),
    new SelectItem("Reading", "Reading"),
    new SelectItem("Writing", "Writing")
};

public SelectItem[] getCheckBoxItems() {

    return checkBoxItems; 
}

public int[] getInterests() {     return interests;
}
public void setInterests(int[] newValue) { 
    interests = newValue; 
} }
4

1 回答 1

1

您需要将 CDI 范围注释与 CDI @Named 注释一起使用,并确保为项目启用了 CDI(WEB-INF/beans.xml 文件存在)。

除此之外,将调试语句添加到 PostConstruct 方法以确认正在创建 bean。在构造 bean 后,该方法由 CDI 自动运行。它还可以用于初始化 bean 字段,因为它保证每次实例化只运行一次,这与类构造函数不同。

package com.jsf.ManagedBeans;

import javax.inject.Named; 
import javax.enterprise.context.RequestScoped;

import javax.faces.model.SelectItem;

@Named @RequestScoped public class TestBean {

  private int[] interests;
  private SelectItem[] checkBoxItems = {
    new SelectItem("Dancing", "Dancing"),
    new SelectItem("Singing", "Singing"),
    new SelectItem("Reading", "Reading"),
    new SelectItem("Writing", "Writing")
  };

  @PostConstruct public void init() {
      System.out.println("testBean initialized");
  }

  public SelectItem[] getCheckBoxItems() {

    return checkBoxItems; 
  }

  public int[] getInterests() {     return interests;
  }
  public void setInterests(int[] newValue) { 
    interests = newValue; 
  }   
}
于 2014-08-15T15:58:16.790 回答