[java] Как я могу показать / скрыть компонент с помощью JSF?


Answers

Фактически вы можете выполнить это без JavaScript, используя только атрибут, полученный от JSF, путем включения элементов, которые будут отображаться / скрыты в компоненте, который может быть повторно отображен, например panelGroup, по крайней мере, в JSF2. Например, следующий код JSF показывает или скрывает один или оба из двух раскрывающихся списков в зависимости от значения третьего. Для обновления дисплея используется событие AJAX:

<h:selectOneMenu value="#{workflowProcEditBean.performedBy}">
    <f:selectItem itemValue="O" itemLabel="Originator" />
    <f:selectItem itemValue="R" itemLabel="Role" />
    <f:selectItem itemValue="E" itemLabel="Employee" />
    <f:ajax event="change" execute="@this" render="perfbyselection" />
</h:selectOneMenu>
<h:panelGroup id="perfbyselection">
    <h:selectOneMenu id="performedbyroleid" value="#{workflowProcEditBean.performedByRoleID}"
                     rendered="#{workflowProcEditBean.performedBy eq 'R'}">
        <f:selectItem itemLabel="- Choose One -" itemValue="" />
        <f:selectItems value="#{workflowProcEditBean.roles}" />
    </h:selectOneMenu>
    <h:selectOneMenu id="performedbyempid" value="#{workflowProcEditBean.performedByEmpID}"
                     rendered="#{workflowProcEditBean.performedBy eq 'E'}">
        <f:selectItem itemLabel="- Choose One -" itemValue="" />
        <f:selectItems value="#{workflowProcEditBean.employees}" />
    </h:selectOneMenu>
</h:panelGroup>
Question

Как я могу показать / скрыть компонент с помощью JSF? В настоящее время я пытаюсь сделать то же самое с помощью javascript, но не успешно. Я не могу использовать сторонние библиотеки.

Благодаря | Аби




Используйте атрибут «rendered», доступный для большинства, если не всех, тегов в пространстве имен h.

<h:outputText value="Hi George" rendered="#{Person.name == 'George'}" />



Одним из очевидных решений было бы использовать javascript (который не является JSF). Чтобы реализовать это JSF, вы должны использовать AJAX. В этом примере я использую группу переключателей, чтобы показать и скрыть два набора компонентов. В back bean я определяю логический переключатель.

private boolean switchComponents;

public boolean isSwitchComponents() {
    return switchComponents;
}

public void setSwitchComponents(boolean switchComponents) {
    this.switchComponents = switchComponents;
}

Когда переключатель будет правдой, будет показан один набор компонентов, а когда он будет ложным, будет показан другой набор.

 <h:selectOneRadio value="#{backbean.switchValue}">
   <f:selectItem itemLabel="showComponentSetOne" itemValue='true'/>
   <f:selectItem itemLabel="showComponentSetTwo" itemValue='false'/>
   <f:ajax event="change" execute="@this" render="componentsRoot"/>
 </h:selectOneRadio>


<H:panelGroup id="componentsRoot">
     <h:panelGroup rendered="#{backbean.switchValue}">
       <!--switchValue to be shown on switch value == true-->
     </h:panelGroup>

   <h:panelGroup rendered="#{!backbean.switchValue}">
      <!--switchValue to be shown on switch value == false-->
   </h:panelGroup>
</H:panelGroup>

Примечание: в событии ajax мы обрабатываем компоненты root. потому что компоненты, которые не отображаются в первую очередь, не могут быть повторно отображены в событии ajax .

Также обратите внимание, что если «componentsRoot» и переключатели находятся под другой иерархией компонентов. вы должны ссылаться на него из корня (root формы).




Links