Jsf 2.0 Заполните h: выберите OneMenu для доступа к странице - PullRequest
1 голос
/ 09 сентября 2010

Я новичок в JSF 2.0, я работал в JSF 1.1 и 1.2 и заполняю selectOneMenu в конструкторе страницы управляемого бина.Когда пользователи получают доступ к странице, список заполняется.пример ниже.Я помещаю то же самое в JSF 2.0, но это не работает, selectOneMenu выглядит пустым.

<h:selectOneMenu id="cboStatus" value="#{PersonBean.idStatus}">
  <f:selectItems value="#{PersonBean.status}"/>
</h:selectOneMenu>

В управляемый компонент конструктора я помещаю:

public class PersonBean {    
    private SelectItem[] status=new SelectItem[0];

    public PersonBean () {
        detallePersonas= new ArrayList();

 status= new SelectItem[3];
 status[0]=new SelectItem("S","Single");
 status[1]=new SelectItem("M","Married");
 status[2]=new SelectItem("D","Divorced");
    }
}
  1. Editor Netbeans 6.8 (JSFМастер настройки по умолчанию 2.0)
  2. Нет ошибки исключения
  3. Никогда не запускайте конструктор PersonBean (я ставлю точку останова и никогда не останавливается)
  4. Существуют и другие способы заполнения выборок для загрузкистраница

Это полный код:

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Person</title>
    </h:head>
    <h:body>
        <h:form id="frmPerson">
            <h:outputLabel id="lblStatus" value="Status:"/>
            <h:selectOneMenu id="cboStatus" value="#{PersonBean.idStatus}">
                <f:selectItems value="#{PersonBean.status}"/>
            </h:selectOneMenu>
        </h:form>
    </h:body>
</html>

PersonBean.java

package com.prueba.backingbean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

/**
 *
 * @author Administrador
 */
@ManagedBean(name = "Person")
@ViewScoped
public class PersonBean {

    private String idStatus;
    private SelectItem[] status = new SelectItem[0];

    public PersonBean() {
        status = new SelectItem[3];
        status[0] = new SelectItem("S", "Single");
        status[1] = new SelectItem("M", "Married");
        status[2] = new SelectItem("D", "Divorced");
    }

    /**
     * @return the idStatus
     */
    public String getIdStatus() {
        return idStatus;
    }

    /**
     * @param idStatus the idStatus to set
     */
    public void setIdStatus(String idStatus) {
        this.idStatus = idStatus;
    }

    /**
     * @return the status
     */
    public SelectItem[] getStatus() {
        return status;
    }

    /**
     * @param status the status to set
     */
    public void setStatus(SelectItem[] status) {
        this.status = status;
    }
}

Ответы [ 4 ]

2 голосов
/ 10 августа 2011
          private Map<String,String>status = new HashMap<String,String>();
          .......
          status.put("S", "Single");
          status.put("M", "Married");
          status.put("D", "Divorced");

на странице JSF:

         <h:selectOneMenu value="#{personBean.idStatus}"  >

            <f:selectItems value="#{personBean.status}"/>                

         </h:selectOneMenu>
1 голос
/ 09 сентября 2010

Это должно быть «personBean» вместо «PersonBean» (первая буква должна быть в нижнем регистре). Вам также нужен геттер для статуса (getStatus()) и сеттер / геттер для idStatus (setIdStatus() / getIdStatus()). Они там?

0 голосов
/ 11 сентября 2010

Смотрите здесь:

@ManagedBean(name = "Person")
@ViewScoped
public class PersonBean {

Вы объявили имя управляемого компонента как Person. Так что это в JSF EL доступно как #{Person}. И все же вы пытаетесь получить к нему доступ как #{PersonBean}. Поскольку такого компонента не существует, меню остается пустым.

У вас есть 3 варианта:

  1. Переименуйте #{PersonBean} на #{Person} на вашей странице JSF.

  2. Переименуйте @ManagedBean(name = "Person") в @ManagedBean(name = "PersonBean") в вашем управляемом бине.

  3. Избавьтесь от имени бина и используйте соглашения по именованию JSF по умолчанию. То есть просто используйте @ManagedBean без name и используйте #{personBean} на своей странице JSF (по сути, имя класса компонента с первым символом в нижнем регистре).

Вариант 3 является предпочтительным.

0 голосов
/ 09 сентября 2010

Вы пытались использовать List вместо Array of SelectItems.Ниже код может помочь вам.

private List<SelectItem> status = new ArrayList<SelectItem>();

status.add(new SelectItem("S","Single"));
status.add(new SelectItem("M","Married"));
status.add(new SelectItem("D","Divorced"));

/*
     SETTER / GETTER
*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...