2011-01-23 15 views
3

JSF 2.0のHtmlDataTableに問題があります。私のWebページには、h:dataTableと他のいくつかのコンテンツがあります。ユーザーがログインしている場合にのみレンダリングする必要があります。rendered = "false"、h:dataTableの内容は常に評価されます

HtmlDataTableの内容はデータベースからロードされます。ユーザーがログインしていないときはh:dataTableは表示されませんが、コンテンツは引き続き評価されます。ここで

は、Webページのコードです:私は、メソッドの呼び出しをログに記録していますgetAllXxx()メソッドで

<h:panelGroup rendered="#{userBean.loggedIn}"> 
    <h:dataTable value="#{xxxBean.allXxx}" 
       var="c"> 
     <h:column> 
      <h:outputText value="#{c.name}"/> 
     </h:column> 
    </h:dataTable> 
    <!-- some other content --> 
</h:panelGroup> 

。しかし、h:dataTable(および他のすべてのコンテンツ)がレンダリングされない場合でも、getAllXxx()メソッドは引き続き呼び出されます。

h:panelGroupの代わりにc:ifを使用しようとしました。それはうまくいくでしょうが、ログインプロセス中に問題が発生するので、これは適切な解決策ではありません。

誰でもこれを解決する方法を知っていますか?前もって感謝します。

+1

私は同じ問題があります。私はGlassFish 3.1にデプロイしています。 – Rogach

答えて

1

Tomcat 7.0.5上のMojarra 2.0.3で問題を再現できません(SSCCE)。

test.xhtml

<!DOCTYPE html> 
<html lang="en" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>SO question 4774516</title> 
    </h:head> 
    <h:body> 
     <h:panelGroup rendered="#{param.show}"> 
      <h:dataTable value="#{bean.list}" var="item"> 
       <h:column>#{item}</h:column> 
      </h:dataTable> 
     </h:panelGroup> 
    </h:body> 
</html> 

com.example.Bean

package com.example; 

import java.util.Arrays; 
import java.util.List; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean 
@RequestScoped 
public class Bean { 

    private List<String> list = Arrays.asList("one", "two", "three"); 

    public List<String> getList() { 
     System.out.println("getList() called"); 
     return list; 
    } 

} 

オープニングhttp://localhost:8080/playground/test.jsfは、任意の標準出力線を表示しません。オープニングhttp://localhost:8080/playground/test.jsf?show=trueが表示されます。

あなたの問題は他の何かによって引き起こされます。 JSF実装のバグか、プロシージャを誤って解釈しただけです。たとえば、は実際にはのポストバック要求であり、適用要求値フェーズ中にゲッターが呼び出され、#{userBean.loggedIn}の結果は呼び出しアクションフェーズでのみ変更されます。あるいは、ゲッターは何か他の人によって呼び出されます。

+0

あなたの例はmojara 2.1.4で動作していません。mojara 2.0.3とmyfaces 2.1.5の両方で動作しています 非常に奇妙です – user1278278

+0

@ user1278278:正確な例では2.1.4で再現できません。 – BalusC

関連する問題