使用richfaces的tabPanel - tab的ontableave

时间:2015-03-06 16:04:01

标签: richfaces jboss-seam

使用Seam 2.2.2.Final和Richfaces 3.3.3.Final。

我需要在用户离开选项卡时执行操作,并且此操作只能在加载所有页面后进行,每个选项卡内容上都会发生一些bean初始化。所以我去读了解。

问题是,例如,有3个选项卡,当渲染每个选项卡并为下一个选项卡渲染时,将触发该命令。没有好处,bean没有初始化,我得到nullpointer指向我!

无论如何要防止此标记出现此行为? 由于我正在对一个非常大的应用程序进行改进,我试图尽可能少地使用已部署的代码。

谢谢提前看看。 以下是我的页面的示例代码:

<?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()}">
                .
                .
                .

1 个答案:

答案 0 :(得分:-1)

@ontableave用于客户端代码,即JavaScript,不适用于bean方法。如果您需要在服务器上执行某些操作以响应客户端事件,请使用<a4j:support>

<rich:tab label="Report" … >
    <a4j:support event="ontableave" 
                 action="#{sessionProcess.writeDraftReport()}" />
</rich:tab>