JSF - PullRequest
       28

JSF

4 голосов
/ 30 декабря 2010

Я новичок в JSF, и у меня есть некоторые странные проблемы с отображением условных частей в форме.

My Facelet:

<h:form id="animalForm">
    <h:selectOneRadio id="animal" onchange="submit()" value="#{index.animal}">
      <f:selectItem itemLabel="Cat" itemValue="1"/>
      <f:selectItem itemLabel="Dog" itemValue="2"/>
    </h:selectOneRadio>
  </h:form>
  <h:outputText value="#{index.animal}"/>
  <c:if test="#{index.animal eq 1}">
    <h:outputText value="Cat"/>
  </c:if>
  <c:if test="#{index.animal eq 2}">
    <h:outputText value="Dog"/>
  </c:if>

И мой боб:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name = "index")
@RequestScoped
public class IndexBean {
  public static final int CAT = 1;
  public static final int DOG = 2;
  private int animal;

  public IndexBean() {

  }

  public int getAnimal() {
    return animal;
  }

  public void setAnimal(int animal) {
    this.animal = animal;
  } 

}

Когда я выбираю один элемент, значение будет отображаться для примера (1 или 2), но больше ничего не будет отображаться в форме ??? Что не так с моим кодом ???

Ответы [ 2 ]

5 голосов
/ 30 декабря 2010

Используйте атрибут rendered (<h:outputText rendered="#{index.animal eq 1}" />) для условного отображения компонентов.Использовать JSTL сложно с JSF.

3 голосов
/ 31 декабря 2010

Если вы действительно не понимаете жизненный цикл представления JSF, не используйте c: foreach и c: if или какие-либо альтернативы.JSF - это компонентный фреймворк, поэтому фейскеты не являются языком шаблонов.Если вы попытаетесь использовать его как один, вы разочарованы (возможно, обвиняете невинную среду).

Представление JSF создается (немного упрощается) один раз за взаимодействие с пользователем, независимо от количества запросов.,После того, как он создан, вы не можете добавлять или удалять компоненты (опять же, упрощение), вы можете только изменять их состояние (например, рендеринг / не рендеринг).Поскольку весь смысл JSF состоит в том, чтобы инкапсулировать представление как статическую сущность, а не как программу, которая время от времени генерирует HTML, даже если вы могли бы использовать какой-то , если или выберите , вы не знали бы и не могли бы контролировать, когда он выполняется (после чтения параметров запроса? До чтения параметров запроса? До или после проверки? До или после преобразования?).

Я бынапишите свой код как:

@ManagedBean(name = "index")
@RequestScoped
public class IndexBean {
  public enum Animal {
      Cat, Dog;
  }
  private Animal animal;

  public Animal getAnimal() {
    return animal;
  }

  public void setAnimal(Animal animal) {
    this.animal = animal;
  } 

  public Animal[] getAnimals(){
      return Animal.values();
  }
}

А затем:

  <h:form id="animalForm">
    <h:selectOneRadio id="animal" onchange="submit()" value="#{index.animal}">
        <f:selectItems value="#{index.animals}"/>
    </h:selectOneRadio>
  </h:form>
  The animal is: #{index.animal}
...