gpt4 book ai didi

java - 虽然呈现 ="false",但内容为 h :dataTable is always evaluated

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:46 25 4
gpt4 key购买 nike

我遇到了 JSF 2.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。那样行得通,但是我在登录过程中遇到了问题,所以这不是合适的解决方案。

有人知道怎么解决吗?提前致谢。

最佳答案

无法使用以下 SSCCE 在 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>

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 实现中的错误,要么您只是误解了该过程。例如,它可以实际上是一个回发请求,其中在应用请求值阶段调用 getter,并且 #{userBean.loggedIn} 的结果仅在调用操作期间更改阶段。或者 getter 被其他东西调用。

关于java - 虽然呈现 ="false",但内容为 h :dataTable is always evaluated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4774516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com