jsf – 为什么我需要嵌套一个组件与rendered =“#{some}”在另一个组件,当我想ajax更新它?

前端之家收集整理的这篇文章主要介绍了jsf – 为什么我需要嵌套一个组件与rendered =“#{some}”在另一个组件,当我想ajax更新它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我发现了几个接近这个问题的答案,我发现足以解决我有的问题。但即使如此,我很好奇,了解这方面的工作。让我举一个例子:

我有一个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

原文链接:https://www.f2er.com/ajax/160443.html

猜你在找的Ajax相关文章