Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尽管已呈现=”;假“;,始终对h:dataTable的内容进行评估_Java_Jsf_Jsf 2_Rendered Attribute - Fatal编程技术网

Java 尽管已呈现=”;假“;,始终对h:dataTable的内容进行评估

Java 尽管已呈现=”;假“;,始终对h:dataTable的内容进行评估,java,jsf,jsf-2,rendered-attribute,Java,Jsf,Jsf 2,Rendered Attribute,我对JSF2.0的HtmlDataTable有一个问题。在我的网页上,我有一个h:dataTable和一些其他内容,只有在用户登录时才应该呈现这些内容 HtmlDataTable的内容是从数据库加载的。尽管在用户未登录时不会呈现h:dataTable,但仍会对内容进行评估 以下是网页的代码: <h:panelGroup rendered="#{userBean.loggedIn}"> <h:dataTable value="#{xxxBean.allXxx}"

我对JSF2.0的HtmlDataTable有一个问题。在我的网页上,我有一个h:dataTable和一些其他内容,只有在用户登录时才应该呈现这些内容

HtmlDataTable的内容是从数据库加载的。尽管在用户未登录时不会呈现h:dataTable,但仍会对内容进行评估

以下是网页的代码:

<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>

在getAllXxx()方法中,我记录了该方法的调用。但是,如果没有呈现h:dataTable(以及所有其他内容),则仍然会调用getAllXxx()方法

我尝试使用c:if而不是h:panelGroup。这会起作用,但在登录过程中我会遇到问题,因此这不是合适的解决方案


有人知道如何解决这个问题吗?提前感谢。

无法在Tomcat 7.0.5上的Mojarra 2.0.3上重现您的问题,原因如下

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>
打开时不显示任何标准行。开幕式展示了他们


你的问题是由其他原因引起的。这可能是JSF实现中的一个bug,也可能是您误解了这个过程。例如,它实际上可以是一个回发请求,其中getter在应用请求值阶段被调用,而
{userBean.loggedIn}
的结果仅在调用操作阶段更改。或者getter被其他东西调用。

我也有同样的问题。我正在GlassFish 3.1上部署。您的示例不适用于mojara 2.1.4,而同时适用于mojara 2.0.3和myfaces 2.1.5,这非常重要strange@user1278278:我也无法在2.1.4中用给定的确切示例重现它。
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;
    }

}