Отрисовка элементов в MyFaces 1.1.1

Я пытаюсь создать простую страницу jsf, где у меня есть раскрывающийся список, значение которого определяет, какую метку отображать. Первоначально рендеринг всех меток устанавливается как false с помощью конструктора вспомогательного компонента. Но я вызвал команду submit onchange, которая устанавливает соответствующие значения для меток в true. Я установил область поддержки bean-компонента как session, чтобы устанавливаемое значение не удалялось при изменении. Однако метка не отображается при изменении. Ниже приведен фрагмент кода страницы jsf:

<h:form>

    <h:panelGroup>
    <h:outputLabel styleClass="captionOutputField" value="Select Report Type:" />
<h:selectOneMenu id="selectedMenu" onchange="submit()" valueChangeListener="#{ReportHealth.typeSelectDropDownChange}">
        <f:selectItem itemLabel="" itemValue="empty" />
        <f:selectItem itemLabel="daily" itemValue="daily" />
        <f:selectItem itemLabel="weekly" itemValue="weekly" />
        <f:selectItem itemLabel="monthly" itemValue="monthly" />
</h:selectOneMenu>
<h:panelGroup rendered="#{ReportHealth.daily}">
    <h3>MENU 0</h3>
</h:panelGroup>
<h:panelGroup rendered="#{ReportHealth.weekly}">
    <h3>MENU 1</h3>
</h:panelGroup>
    <h:panelGroup rendered="#{ReportHealth.monthly}">
    <h3>MENU 2</h3>
</h:panelGroup>

Вот поддерживающий компонент:

public class ReportHealth implements Serializable{

private static final long serialVersionUID = 1L;

private boolean weekly;
private boolean monthly;
private boolean daily;
private String menuValue;



public ReportHealth() {
    weekly = false;
    monthly = false;
    daily = false;
}

public String getMenuValue() {
    return menuValue;
}

public void setMenuValue(String menuValue) {
    this.menuValue = menuValue;
}

public boolean isWeekly() {
    return weekly;
}

public void setWeekly(boolean weekly) {
    this.weekly = weekly;
}

public boolean isMonthly() {
    return monthly;
}

public void setMonthly(boolean monthly) {
    this.monthly = monthly;
}

public boolean isDaily() {
    return daily;
}

public void setDaily(boolean daily) {
    this.daily = daily;
}

public void typeSelectDropDownChange(ValueChangeEvent e)
{
    String typeSelectVal = e.getNewValue().toString();
    if(typeSelectVal!=null && typeSelectVal.equalsIgnoreCase("daily"))
    {
        setDaily(true);
        setWeekly(false);
        setMonthly(false);
    }
    else if(typeSelectVal!=null && typeSelectVal.equalsIgnoreCase("weekly"))
    {
        setDaily(false);
        setWeekly(true);
        setMonthly(false);
    }
    else if(typeSelectVal!=null && typeSelectVal.equalsIgnoreCase("monthly"))
    {
        setDaily(false);
        setWeekly(false);
        setMonthly(true);
    }
    else
    {
        setDaily(false);
        setWeekly(false);
        setMonthly(false);
    }
}


}

person Kaushik Chakraborty    schedule 19.02.2016    source источник


Ответы (2)


Я не понимаю, почему вы используете такой сложный код для простой задачи. Вот что вам нужно

<h:form>
 <h:panelGroup>
 <h:outputLabel styleClass="captionOutputField" value="Select Report Type:"/>
<h:selectOneMenu id="selectedMenu" value="#{reportHealth.menuValue}">
    <f:selectItem itemLabel="" itemValue="empty" />
    <f:selectItem itemLabel="daily" itemValue="daily" />
    <f:selectItem itemLabel="weekly" itemValue="weekly" />
    <f:selectItem itemLabel="monthly" itemValue="monthly" />
    <f:ajax render="@form">
                    </f:ajax>
 </h:selectOneMenu>
 <h:panelGroup rendered="#{reportHealth.menuValue eq 'daily'}">
  <h3>MENU 0</h3>
 </h:panelGroup>
 <h:panelGroup rendered="#{reportHealth.menuValue eq 'weekly'}">
  <h3>MENU 1</h3>
 </h:panelGroup>
 <h:panelGroup rendered="#{reportHealth.menuValue eq 'monthly'}">
  <h3>MENU 2</h3>
 </h:panelGroup>
 </h:panelGroup>
</h:form>

и Бин будет

@ManagedBean
@ViewScoped
public class ReportHealth implements Serializable{

 private static final long serialVersionUID = 1L;

 private String menuValue;

 public String getMenuValue() {
    return menuValue;
 }

 public void setMenuValue(String menuValue) {
    this.menuValue = menuValue;
 }

}
person TusharM    schedule 19.02.2016
comment
ОП использует юрский JSF 1.x. ‹f:ajax› и @ViewScoped не существовали в JSF 1.x. Таким образом, ваш ответ вообще не будет работать в JSF 1.x. В остальном я согласен, что эти дополнительные логические свойства излишне сложны. - person BalusC; 20.02.2016

Я узнал, что не так с моим кодом. Вместо того, чтобы помещать метки в <H3>tags. Мне нужно было поместить его в тег <h:outputText>.

person Kaushik Chakraborty    schedule 24.02.2016