为了账号安全,请及时绑定邮箱和手机立即绑定

当我想要Ajax更新一个组件时,为什么我需要在另一个组件中嵌套一个呈现=“#{一些}”的组件?

当我想要Ajax更新一个组件时,为什么我需要在另一个组件中嵌套一个呈现=“#{一些}”的组件?

当我想要Ajax更新一个组件时,为什么我需要在另一个组件中嵌套一个呈现=“#{一些}”的组件?所以我找到了一些接近这个问题的答案,我找到了足够多的答案来解决我的问题。但即使如此,我还是很好奇能不能理解这件事的运作方式。让我举例说明:我有手帕.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>..搜索之后,它不会在多个测试中被选中(可以是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>现在,这种变化允许一切正常工作。我不会介意的.。但我想我也在寻求一些理解。对我为什么要嵌套这些组件有任何见解吗?我肯定漏掉了什么!
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

Ajax更新由客户端的JavaScript语言执行。JavaScript只能访问HTMLDOM树。如果JSF不向HTML输出呈现任何组件,那么HTML DOM树中就没有任何东西可以通过JavaScript在Ajax更新时获得。JavaScript无法通过其ID获取所需的元素。

只有在将有条件JSF呈现的组件包装到另一个组件中时,它才能工作。呈现到HTML输出,因此出现在HTMLDOM树中,因此可通过JavaScript获取。在Ajax呈现/更新期间引用该包装组件。

另见:


查看完整回答
反对 回复 2019-06-16
  • 1 回答
  • 0 关注
  • 424 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信