2010-12-01 9 views
1

私は非常にシンプルですが、JSFの厄介な問題を抱えています。私は、ユーザーが初期選択を行う同じページからデータを取り込もうとするデータテーブル(単純な最初の次のページングオプション)を持っています。JSFのrendered = true/falseの問題に関する奇妙な問題

初期フォーム

<b><h:selectOneRadio id="radio1" layout="pageDirection" style="font-weight: bold" value="#{displayNOC.slection}">  <f:selectItem itemLabel="Search By NOC" itemValue="N" id="selectItem1" /> 
<f:selectItem itemLabel="Search By Title" itemValue="T" id="selectItem2" /> 
</h:selectOneRadio></td> 
<hx:commandExButton type="submit" image="images/btn_search.jpg" action="#{displayNOC.Process_request}" onclick="return validate_ListNoc(this.form)"></hx:commandExButton></b> 

ユーザーがラジオボタンを選択して「検索」をクリックすると、私はこれで((偽レンダリングされたプロパティと同じページに隠されている)のDataTableとページングボタンを移入していますステージNEXTボタンは、レンダリングされたプロパティを使用してフォームロード時に隠されています)、問題はありません。

<B>Search Results :<BR><BR> 
<h:inputHidden id="text1" value="#{displayNOC.firstRow}" ></h:inputHidden> 
navigation Next button start 
<hx:commandExButton type="submit" value="Next" action="#{displayNOC.goNext}" rendered="#{displayNOC.render_panel_status}" disabled="#{displayNOC.firstRow + displayNOC.rowPerPage >= displayNOC.totalSize}"> 
</hx:commandExButton> 

<h:dataTable border="1" id="table" value="#{displayNOC.WAMNOC}" rendered="#{displayNOC.render_status}" var="SearchResult" headerClass="row2" rowClasses="row-even,row-odd" cellspacing="6"> 
<h:column> 
<f:facet name="header"> 
    <h:commandLink value="NOC_Number" style="text-align: center"> 
    </h:commandLink> 
     </f:facet> 
     <h:outputText value="#{SearchResult[0]}" /> 
     </h:column> 
...................... 
....................... 
</h:datatable> 

私の管理Bean SCOPE:私はGoNextをクリックしたときに

@SuppressWarnings("unchecked") 
public void Process_request() 
{ 
    setRender_status(true); 
    setRender_panel_status(true); 
    WAMNOCSERVICE WNS=new WAMNOCSERVICE(); 
    List<WAM_NOC> wnoc= WNS.getNOCandOccupation(0,10); 
    //get the total size of the records 
    setTotalSize(WNS.totalRecordAvaiable()); 
    setTotalpage(wnoc.size()/10); 
    setRowPerPage(10); 
    setFirstRow(1); 
    setWAMNOC(wnoc); 
} 

//this action is for next button in the table paging 
@SuppressWarnings("unchecked") 
public void goNext() 
{ 
    setRender_status(true); 
    setRender_panel_status(true); 
    setRowPerPage(10); 
    System.out.println(firstRow); 
    firstRow = getFirstRow() + rowPerPage; 
    WAMNOCSERVICE WNS=new WAMNOCSERVICE(); 
    List<WAM_NOC> wnoc= WNS.getNOCandOccupation(firstRow,rowPerPage); 
    setWAMNOC(wnoc); 
    } 

私の問題がある(私はすべてのvarのためのすべてのゲッターとセッターを持っている)、次のように顔-config.xmlの要求です( )ボタンrender_statusがtrueに設定されず、データテーブルやボタンが表示されなくなりました。 JSFの新機能ですが、これは私にこのようなトラブルを与えると考えられる最後のものでした。どんな助けも高く評価されます。

答えて

1

rendered属性の条件は、後続の要求で再評価されます。しかし、リクエストスコープのBeanに依存しているため、次の新しいリクエストで再作成され、この状態はデフォルトに戻ります。この場合、アクションは、UICommandコンポーネントまたは1つで呼び出されませんその親の。

  • セッションスコープに豆を入れて:

    のJSF 1.xではこの一周するには、いくつかのソリューションがあります。エンドユーザが同じセッションを複数のタブ/ブラウザで同じページを開くたびに、最も簡単ではありますが、ユーザーエクスペリエンスには向いていません。

  • バインディングに<h:inputHidden>を使用してください。厄介な、詳細はthis answerで見つけることができます。

  • Tomahawkの<t:saveState>を使用して、次の要求でBeanを保持します。きれいでいいですが、追加のコンポーネントライブラリが必要です。

    <t:saveState value="#{displayNOC}" /> 
    

JSF 2.0ソリューションは、ちょうどビューのスコープでBeanを置くことであろう。

+0

あなたの投稿をありがとう。あなたの投稿/サイトをフォローしていて、基本的にあなたの投稿記事からJSFを学びました。私は1つのフォローアップの質問がありますが、これをJSF 1.1バージョンで処理する最良の方法は何でしょうか。 Websphereプラグインを確認したところ、JSF 1.1です。もう一度あなたの迅速な対応に感謝します。 – BBA

+0

ああ、もともとJSF 2.0としてタグ付けしていたので、私はそれをJSF 2.0と仮定しました。残念ながら、それはJSF 1.xでハッキリになるでしょう...私は答えを更新しました。 – BalusC

+0

もう一度ありがとうございます。私はあなたの助けに感謝します – BBA