究竟是什么process,并update在PrimeFaces p:commandXxx组件和execute和render的f:ajax标签?
哪个在验证时有效?什么是update属性做,而不是更新的值从后端组件?不要process属性绑定值模型?究竟是什么@this,@parent,@all并@form在这两个属性?
下面的例子工作正常,但我对基本概念有点困惑.
<p:commandButton process="@parent"
update="@form"
action="#{bean.submit}"
value="Submit" />
Run Code Online (Sandbox Code Playgroud) 下面的代码是从PrimeFaces的DataGrid + DataTable的教程启发和放入<p:tab>一个的<p:tabView>居住在<p:layoutUnit>的<p:layout>.这是代码的内部部分(从p:tab组件开始); 外部是微不足道的.
<p:tabView id="tabs">
<p:tab id="search" title="Search">
<h:form id="insTable">
<p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
<p:column>
<p:commandLink id="select" update="insTable:display" oncomplete="dlg.show()">
<f:setPropertyActionListener value="#{lndInstrument}"
target="#{instrumentBean.selectedInstrument}" />
<h:outputText value="#{lndInstrument.name}" />
</p:commandLink>
</p:column>
</p:dataTable>
<p:dialog id="dlg" modal="true" widgetVar="dlg">
<h:panelGrid id="display">
<h:outputText value="Name:" />
<h:outputText value="#{instrumentBean.selectedInstrument.name}" />
</h:panelGrid>
</p:dialog>
</h:form>
</p:tab>
</p:tabView>
Run Code Online (Sandbox Code Playgroud)
当我单击时<p:commandLink>,代码停止工作并给出消息:
找不到表达式为"insTable:display"的组件,引用自"tabs:insTable:select".
当我尝试相同的使用时<f:ajax>,它失败了,基本上告诉相同的不同消息:
<f:ajax>包含一个未知的id"insTable:display"无法在组件"tabs:insTable:select"的上下文中找到它
这是怎么造成的,我该如何解决?
所以我找到了一些接近这个的答案,我发现足以解决我遇到的问题.但即使这样,我也很好奇了解这方面的运作方式.让我用一个例子来说明:
我有一个.xhtml看起来像这样(缩短)的facelet 页面.
<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>
Run Code Online (Sandbox Code Playgroud)
现在,为了突破性,我不会发布所有的支持bean代码,但我有这样的东西:
public void find() {
searchResults = setResults(true);
}
Run Code Online (Sandbox Code Playgroud)
哪里searchResults是ArrayList<Objects>.在搜索之后,它不是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>
Run Code Online (Sandbox Code Playgroud)
现在,这种变化可以让一切正常.我对此感到满意......但我想我也在寻求一些理解.有关为什么我必须嵌套这些组件的任何见解?我肯定错过了一些东西!
我<p:ajax>在我的代码中使用PrimeFaces 标记.我们如何排除子组件在更新父组件的ajax调用中更新?
对不起,如果我很厚,但f:ajax标签中的execute ="@ all"真的应该做什么?我希望它提交页面上的所有元素,但它似乎只发布封闭形式的值,而不是页面上的所有表单.
例如
<h:body>
<h:form id="form1">
Input1/Form1 <h:inputText id="testinput" value="#{testBean.input1}" />
</h:form>
<h:form id="form2">
Input2/form2 <h:inputText id="testinput2" value="#{testBean.input2}" />
<h:commandButton value="Ok" actionListener="#{testBean.al}">
<f:ajax execute="@all" />
</h:commandButton>
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
单击时仅发布form2.
使用mojarra 2.0.2 ..
这是一个笨拙的问题!:)
这可能以某种方式成为可能吗?可以<p:dataTable>(无论是延迟加载还是其他方式)更新而不更新其标题(表格中的内容(行)以及页脚应该更新而不更新表格标题)?
更新<p:dataTable>可以由任何UICommand类似的触发<p:commandButton>,<p:commandLink>等等.
像这样的事情可以可视化,当我们编辑/更新使用行<p:cellEditor>与结合<p:rowEditor/>的<p:dataTable>(不知道单细胞编辑).
<p:dataTable id="dataTable" var="row" value="#{bean}" ...>
<p:column headerText="Header 1" sortBy="#{row.property1}" filterBy="#{row.property1}">
....
</p:column>
<p:column>
<!--They may be our own headers-->
<f:facet name="header">
Header 2
...
</f:facet>
....
</p:column>
...
</p:dataTable>
Run Code Online (Sandbox Code Playgroud) 我有一种情况,我想在触发"选择"事件时更新页面上的多个组件. 但是,其中两个位置位于tabView中,我只想更新这些组件,如果它们位于当前选定的选项卡中.我怀疑我正在寻找的是这样的......
<p:ajax event="select"
update="@(<don't know what to put here> .ui-tabs-selected)"
listener="#{treeSelectionView.onNodeSelect}" />
Run Code Online (Sandbox Code Playgroud)
但我不确定.
我尝试的另一种策略是使tabView dynamic ="true",但是当我从p:ajax标记调用更新时,即使未选中选项卡,它也会拉取数据.:(
我是Primefaces的新手,并且喜欢到目前为止我所见过的东西.这似乎不应该太难,但我不知何故错过了这个标记.此外,我很难找到有助于我的文档或示例.希望我只是在错误的地方寻找.:)
提前致谢.