我们在哪里使用immediate =“true”

时间:2013-10-11 23:39:25

标签: jsf jsf-2 primefaces datatable

所以我有一个

A.xhtml

<p:tabView id="headOfAccountsId_tabview">
<p:tab title="Main Head Of Accounts" id="mainHeadOfAccountsId_tab">
 // completely finished with codes 
 // here i have done some inputtext fields with jsf validation , 
 // and submit button to call action on ajax
 // and p:datatable to view only records and user can edit and delete record on ajax
</p:tab>
<p:tab title="Sub Head Of Accounts" id="subHeadOfAccountsId_tab">
 // just have open and closing tags of p:tab i meant i will do code later here 
</p:tab>
</p:tabView>

我有一个其他xhmt文件用于不同的目的我正在使用

B.xhtml

 // all the input fields outside the <p:tabView >
 // here i have done some inputtext fields with jsf validation , 
 // and submit button to call action on ajax
<p:tabView >
<p:tab>
 //p:datatable to view only records
</p:tab>
<p:tab>
//p:datatable to view only records
</p:tab>
</p:tabView>

我的问题是在两个文件(A和B)中我都使用过

<p:ajax event="tabChange" />

但在文件A.xhtml中,当我更改了标签监听器时没有调用方法(java类的操作方法)而没有

  immediate="true"

并在文件B.xhtml中,当我更改标签时,方法是在没有

的情况下调用
  immediate="true"

任何人都能让我明白发生了什么事吗?或者为什么/我们使用'立即'属性? 我应该发布我的整个代码吗?

2 个答案:

答案 0 :(得分:2)

immediate="true"会导致在“应用请求值”中调用操作。任何验证/转换之前的阶段。标签默认为false,这使得JSF通过标准生命周期并在“调用应用程序”中调用操作。相。

我猜测(很难从存根示例中获取)您有验证或转换错误。在错误事件中,JSF会跳过剩余的生命周期阶段,因此不会调用tabChange事件。

您应该尝试通过在页面顶部创建<h:messages />标记或检查堆栈跟踪是否已记录来进行调试。

有关详细信息,请参阅:

http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html

http://docs.oracle.com/javaee/6/tutorial/doc/bnaqq.html

http://balusc.blogspot.hu/2006/09/debug-jsf-lifecycle.html#AddImmediateTrueToUIInputOnly

答案 1 :(得分:2)

对于文件A.xhtml,它们将是验证错误,因此它不会调用InvokeApllication阶段。

但是在B.xhtml中他们不会和验证错误因此它调用了InvokeApplication阶段并调用了托管bean方法。

穿戴      您的A.xhtml中的<p:message autoUpdate="true" />可能会收到错误消息

其中,immediate =“true”是跳过验证阶段..