所以我有一个
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"
任何人都能让我明白发生了什么事吗?或者为什么/我们使用'立即'属性? 我应该发布我的整个代码吗?
答案 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”是跳过验证阶段..