JSF выбрать элементы из подкласса - PullRequest
2 голосов
/ 14 сентября 2010

Я пытаюсь заполнить список <h:selectOneMenu>.Однако список, который я пытаюсь получить, является частью другого класса, который является переменной в базовом классе.

Вот что у меня есть, и я не уверен, возможно ли это вообще или как это сделатьit.

У меня есть класс Citation со следующим:

public class Citation {
    private int id;
    private String title;
    private Status status;

    // getters and setters
}

Затем у меня есть класс Status со следующим:

public class Status {
    private int id;
    private String name;

    public List<Status> getAll() {
        // goes to the database and gets a list of status objects
        System.out.println("I was called!");
    }

    // getters and setters
}

Тогдана моей странице xhtml у меня есть следующее:

<h:selectOneMenu id="citation_status" value="#{citation.status}">
    <f:selectItems value="#{citation.status.all}" var="s"
            itemLabel="#{s.name}" itemValue="#{s.id}" />
</h:selectOneMenu>

Однако, похоже, что это вовсе не вызов метода getAll в классе Status.Когда страница завершает загрузку, поле выбора становится пустым, и консоль не выводит I was called! из метода getAll().

Я немного новичок в JSF, и я попытался найтилучшее, что я могу, но я не совсем уверен, какую терминологию использовать при поиске, потому что это технически не называется «подкласс», но это лучшее имя, которое я могу придумать, так что, разумеется, япри поиске ничего не получится.

Дополнительная информация

Если это поможет:

  • Я использую Glassfish в качестве сервера приложений
  • Я использую Hibernate для своего ORM
  • Я использую JSF 2.0

Ответы [ 2 ]

2 голосов
/ 14 сентября 2010

Видимо #{citation.status} вернул null.

Тем не менее, это не сработает.h:selectOneMenu value должен соответствовать тому же типу, что и f:selectItem itemValue, который в данном случае int.Вы получите исключение конвертера.

Как решить эту проблему наилучшим образом, зависит от функциональных требований, которые пока неясны в данном вопросе.Может быть, вам нужен f:selectItem itemValue="#{s}", или вам нужен h:selectOneMenu value="#{citation.id}".


Обновление : что касается конвертера, вот пример запуска:

@FacesConverter(forClass=Status.class)
public class URLConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            return someStatusDAO.findById(Long.valueOf(value));
        } catch (SomeException e) {
            throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to Status", value)), e);
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return String.valueOf(((Status) value).getId());
    }

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

Вам нужен публичный геттер для статуса в Цитате.

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