2

我将尝试解释自己:

我正在使用 java、JSF 2.0 和 RichFaces 4.2.1 开发一个 JSF 项目。

当我访问我的 jsf 时,它只加载一个搜索过滤器和一个 commandLink。commandLink 将在我的 backingBean 中启动一个方法来加载将显示在 dataTable 中的数据。

<h:commandLink id="btnRecords">
    <f:ajax render="myCompAjax" event="click" listener="#{myBean.loadRecords}" />
    <h:graphicImage value="img/ico_new.gif" alt="#{bundle['button.search']}" />
</h:commandLink>

数据表一开始是不可见的,但是一旦您单击 commandLink,backingBean 中的一个标志就会发生变化,并且该表会显示我刚刚加载的数据。

<a4j:outputPanel ajaxRendered="true" id="myCompAjax">
    <h:dataTable id="recordsTable" value="#{myBean.records}"                   
     var="item" rendered="#{myBean.flagShowTable}">
        <h:column headerClass="thPijama" >
            <f:facet name="header">
                <table><tr class="thPijama"><td></td></tr></table>
            </f:facet>
            <h:commandLink action="#{myBean.goNextPage}">
                <h:outputText value="Go Next Page" />
                <h:inputHidden value="#{item}" />   
            </h:commandLink>                                                     
        </h:column>                   
    </h:dataTable>
</a4j:outputPanel>

问题是 dataTable 中的 commandLink 操作根本不起作用。我只想导航到另一个 jsf。事实上,它所做的是隐藏 dataTable 并保持过滤器不变。操作方法仍然无法访问。

当然,如果我在 dataTable 之外设置相同的 commandLink,它会起作用。

我不能使用 Session Scope Beans,因为我工作的人不批准它。

谁能帮我?

感谢您的提示。

4

1 回答 1

3

我不能使用 Session Scope Beans,因为我工作的人不批准它。

您是否暗示将 bean 放在会话范围而不是请求范围实际上解决了问题?如果是这样,那么只需将 bean 放在视图范围内。

@ManagedBean
@ViewScoped
public class MyBean implements Serializable {
    // ...
}

这样,只要您通过 ajax 请求与同一个视图交互,bean 就会一直存在。该 bean不在同一会话中的其他浏览器选项卡/窗口中共享(这确实是架构师在简单视图的情况下禁止使用它的主要原因)。

也可以看看:

于 2012-11-07T17:05:19.183 回答