2 phoenix zd phoenix_zd 于 2015.06.11 09:49 提问

【JSF/PrimeFaces】查询条件与查询结果两个panel隐藏与展示的问题

【环境】
JSF2.2+PrimeFaces5
【需求】
查询功能实现:

  1. 用户进入查询界面,输入查询条件(大概有十几个,占了半个页面)
  2. 点击“查询”按钮后,进入查询结果页面
  3. 查询结果页面有一个“新查询”的按钮,点击可以清空之前的查询条件,回到查询页面

【实现】
我用了一个页面来展示查询条件和查询结果,点击查询按钮时,隐藏查询条件panel,显示查询结果panel;点击“新查询”按钮时,隐藏查询结果panel,显示查询条件panel

【代码】
xhtml:

        <p:panel id="searchFormPanel" binding="#{basicSearchUi.searchFormPanel}">
        <h:form id="searchForm" method="post">
          <p:commandButton value="查询" actionListener="#{basicSearchUi.doBasicSearch}" update=":#{p:component('resultForm')} :#p:component('searchFormPanel')}"></p:commandButton>
        </p:form>
...

        <p:panel id="resultFormPanel" binding="#{basicSearchUi.resultFormPanel}">
        <h:form id="resultForm" method="post">
          <p:commandButton value="新查询" action="#basicSearchUi.newSearch()}"></p:commandButton>
        </h:form>  

java(backingbean):

    Panel searchFormPanel;
    Panel resultFormPanel;
    public void doBasicSearch()
    {
        ...
        searchFormPanel.setVisible(false);
        resultFormPanel.setVisible(true);
        ...
    }

    public void newSearch()
    {
        if(searchResult!=null)
            searchResult.clear();

        searchCriteria = new BasicSearchVO();       

        searchFormPanel.setVisible(true);
        searchFormPanel.setRendered(true);

        resultFormPanel.setVisible(false);
    }    

【问题】
当点击“查询”时,查询条件panel能正确的隐藏,查询结果panel显示查询到的记录;但是,当点击“新查询”时,查询结果panel隐藏了,而查询条件panel却无法显现! 直接查看在chrome里查看html,发现查询条件panel根本就没有生成任何html代码。

【疑惑1】
visible=false的含义跟rendered=false的含义应该是不同的,前者应该生成html而后者不生成
【疑惑2】
我是jsf新手,请问这样处理查询条件、查询结果的姿势对吗(一个页面搞定)?还是说需要拆分成两个页面?因为查询结果有分页,而我需要一次查出所有记录,方便分页展示和排序,一个页面貌似更方便!

Csdn user default icon
上传中...
上传图片
插入图片