使用 richfaces 的 tabPanel - tab 的 ontableave
Using richfaces's tabPanel - tab's ontableave
使用 Seam 2.2.2.Final 和 Richfaces 3.3.3.Final.
我需要在用户离开标签时执行一个动作,这个动作只能在所有页面加载后发生,每个标签内容上都有一些 bean 初始化。所以我去读了关于 .
问题是,例如,有 3 个选项卡,当每个选项卡都被渲染并且渲染传递给下一个选项卡时,命令被触发。不好,bean 未初始化,空指针指向我!
是否要阻止此标签上的这种行为?
由于我正在对一个非常大的应用程序进行改进,因此我试图尽可能少地扰乱已部署的代码。
提前感谢您的关注。
这是我的页面的示例代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a="http://richfaces.org/a4j"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
template="/WEB-INF/xhtml/templates/frameTemplate.xhtml">
<ui:param name="pageTitle" value="Elaborar relatório, voto e ementa" />
<ui:define name="title">#{pageTitle}</ui:define>
<ui:param name="home" value="#{sessionProcess}" />
<ui:define name="frameBody">
<rich:jQuery query="hide()" selector="#update" timing="onload"/>
<s:div id="allTabs">
<rich:tabPanel title="Tab1" switchType="ajax" style="width: 100%;">
<rich:tab label="Report"
rendered="#{!sessionProcess.hideReport}"
title="Report" style="width: 100%;"
action="#{sessionProcess.setReport()}" immediate="true" ontableave="#{sessionProcess.writeDraftReport()}">
.
.
.
<rich:tabPanel title="Tab2" switchType="ajax" style="width: 100%;">
<rich:tab label="Vote"
rendered="#{!sessionProcess.hideVote}"
title="Report" style="width: 100%;"
action="#{sessionProcess.setVote()}" immediate="true" ontableave="#{sessionProcess.writeDraftVote()}">
.
.
.
@ontableave 用于客户端代码,即 JavaScript,不适用于 bean 方法。如果您需要在服务器上执行某些操作以响应客户端事件,请使用 <a4j:support>
:
<rich:tab label="Report" … >
<a4j:support event="ontableave"
action="#{sessionProcess.writeDraftReport()}" />
</rich:tab>
使用 Seam 2.2.2.Final 和 Richfaces 3.3.3.Final.
我需要在用户离开标签时执行一个动作,这个动作只能在所有页面加载后发生,每个标签内容上都有一些 bean 初始化。所以我去读了关于 .
问题是,例如,有 3 个选项卡,当每个选项卡都被渲染并且渲染传递给下一个选项卡时,命令被触发。不好,bean 未初始化,空指针指向我!
是否要阻止此标签上的这种行为? 由于我正在对一个非常大的应用程序进行改进,因此我试图尽可能少地扰乱已部署的代码。
提前感谢您的关注。 这是我的页面的示例代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a="http://richfaces.org/a4j"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
template="/WEB-INF/xhtml/templates/frameTemplate.xhtml">
<ui:param name="pageTitle" value="Elaborar relatório, voto e ementa" />
<ui:define name="title">#{pageTitle}</ui:define>
<ui:param name="home" value="#{sessionProcess}" />
<ui:define name="frameBody">
<rich:jQuery query="hide()" selector="#update" timing="onload"/>
<s:div id="allTabs">
<rich:tabPanel title="Tab1" switchType="ajax" style="width: 100%;">
<rich:tab label="Report"
rendered="#{!sessionProcess.hideReport}"
title="Report" style="width: 100%;"
action="#{sessionProcess.setReport()}" immediate="true" ontableave="#{sessionProcess.writeDraftReport()}">
.
.
.
<rich:tabPanel title="Tab2" switchType="ajax" style="width: 100%;">
<rich:tab label="Vote"
rendered="#{!sessionProcess.hideVote}"
title="Report" style="width: 100%;"
action="#{sessionProcess.setVote()}" immediate="true" ontableave="#{sessionProcess.writeDraftVote()}">
.
.
.
@ontableave 用于客户端代码,即 JavaScript,不适用于 bean 方法。如果您需要在服务器上执行某些操作以响应客户端事件,请使用 <a4j:support>
:
<rich:tab label="Report" … >
<a4j:support event="ontableave"
action="#{sessionProcess.writeDraftReport()}" />
</rich:tab>