加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsf – 为什么我需要嵌套一个组件与rendered =“#{some}”在另一

发布时间:2020-12-16 03:13:51 所属栏目:百科 来源:网络整理
导读:所以我发现了几个接近这个问题的答案,我发现足以解决我有的问题。但即使如此,我很好奇,了解这方面的工作。让我举一个例子: 我有一个facelet .xhtml页面看起来像这样(缩短)。 h:form id="resultForm" h:panelGroup class="search_form" layout="block" h:
所以我发现了几个接近这个问题的答案,我发现足以解决我有的问题。但即使如此,我很好奇,了解这方面的工作。让我举一个例子:

我有一个facelet .xhtml页面看起来像这样(缩短)。

<h:form id="resultForm">

    <h:panelGroup class="search_form" layout="block">
        <h:inputText id="lastname" value="#{search.lastname}"/>
        <h:commandButton action="#{search.find}" value="Find">
            <f:ajax execute="lastname" render="resultDisplay"/>
        </h:commandButton>
    </h:panelGroup>

    <h:dataTable value="#{search.searchResults}" var="results" id="resultDisplay"
            rendered="#{!empty search.searchResults}">  
        <h:column>
            #{results.field}
        </h:column>
    </h:dataTable>

</h:form>

现在,为了简洁,我不会发布所有的支持bean代码,但我有这样的东西:

public void find() {
    searchResults = setResults(true);
}

其中searchResults是ArrayList< Objects&gt ;.搜索之后,它不是null - 在多个测试中检查(可以为null,但不是在我正在做的测试中)。 现在。这不工作。 但是如果我把dataTable嵌套在另一个,让我们说panelGroup,它会工作。

<h:panelGroup id="resultDisplay">
    <h:dataTable value="#{search.searchResults}" var="results"
        rendered="#{!empty search.searchResults}">  
        <h:column>
            #{results.field}
        </h:column>
    </h:dataTable>
</h:panelGroup>

现在,这种变化允许一切工作正常。我会对这个…但我想我也想寻求一点了解。任何洞察,为什么我必须嵌套这些组件?我肯定错过了什么!

Ajax更新由客户端中的JavaScript语言执行。所有JavaScript都可以访问的是HTML DOM树。如果JSF没有将任何组件渲染到HTML输出,那么在HTML DOM树中没有什么可以通过Ajax更新的JavaScript获得。 JavaScript无法通过其ID获取所需的元素。

它只会工作,如果你有条件的JSF渲染组件包装在另一个组件,总是呈现到HTML输出,因此总是存在于HTML DOM树,因此总是可以通过JavaScript获得。在ajax渲染/更新期间引用包装组件。

也可以看看:

> Communication in JSF2 – Ajax rendering of content which is by itself conditionally rendered

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读