как показать скрытые таблицы данных, выбрав значения из выпадающего меню в jsf2.0 и простых лицах 2.2 - PullRequest
3 голосов
/ 14 декабря 2011

У меня выпадающее меню, при выборе определенного значения из выпадающего меню, я должен показать соответствующую ему таблицу данных и при выборе второго из выпадающего меню, значение, которое должна скрыть предыдущая таблица данных, и таблица данныхсоответствующее второе значение должно заполниться и так далее, вот мои коды:

   <h:selectOneMenu value="#{bean.value}"
styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all"
style="width:100px;">
<f:selectItem itemLabel="Select" itemValue="Select" />
<f:selectItem itemLabel="5" itemValue="5" id="mySelectedValue1" onclick="hideOrShow(??);"/>
<f:selectItem itemLabel="6" itemValue="6" id="mySelectedValue2" onclick="hideOrShow(??);"/>
<f:selectItem itemLabel="7" itemValue="7" id="mySelectedValue3" onclick="hideOrShow(??);"/>    
    </h:selectOneMenu> 


<script type="text/javascript">   
function hideOrShow(show) {
var obj = document.getElementById("myForm:myPanel");
     if (show) { 
        obj.style.display = "block";
     }
 else {
         obj.style.display = "none"; 
    } 
  } </script> 


<h:panelGrid id="myPanel" columns="2"> 
    ... 
</h:panelGrid> 

Мой вопрос - что указать в качестве параметров в HideOrShow (), показанном как ??так что функция сценария Java будет его идентифицировать.И как изначально все таблицы данных будут скрыты?

спасибо: любопытный

1 Ответ

5 голосов
/ 14 декабря 2011

Использование простого JS в сочетании с JSF часто является причиной проблем и неинтуитивности из-за того, как работает управление состоянием JSF. Вы должны предпочесть решение проблемы с использованием чистого JSF. Это также часто заканчивается в более простом виде. Вы можете использовать JSF <f:ajax> для этой конкретной цели в сочетании с атрибутом rendered на компонентах для отображения / скрытия.

Пример запуска:

<h:form>
    <h:selectOneMenu value="#{bean.value}">
        <f:selectItem itemLabel="Select" itemValue="#{null}" />
        <f:selectItem itemLabel="5" itemValue="5" />
        <f:selectItem itemLabel="6" itemValue="6" />
        <f:selectItem itemLabel="7" itemValue="7" />
        <f:ajax render="tables" />
    </h:selectOneMenu> 

    <h:panelGroup id="tables">
        <h:dataTable value="#{bean.list5}" rendered="#{bean.value == 5}">
            ...
        </h:dataTable>
        <h:dataTable value="#{bean.list6}" rendered="#{bean.value == 6}">
            ...
        </h:dataTable>
        <h:dataTable value="#{bean.list7}" rendered="#{bean.value == 7}">
            ...
        </h:dataTable>
    </h:panelGroup>
</h:form>

Убедитесь, что bean-компонент находится в области видимости всякий раз, когда таблицы содержат сами входные компоненты.

...