0

我有一个关于 JSF 1.2 + Richfaces 3.3 的问题。我有一个网络应用程序,它有一些导航规则和一些 ajax 功能。在某些时候,我希望应用程序在服务器端执行操作后在浏览器中打开一个新选项卡并显示一个 xhtml 页面。我为此选择了标签。这就是它的外观:

<h:commandLink target="_blank"
                action="#{sm_gestiondocumental_gestorUserAuditBean.actionCreateUserAuditManager}">
                <h:graphicImage value="/images/sm_gestiondocumental/checklist.png"
                    alt="#{wmsg.VIEW_AUDITS}" title="#{wmsg.VIEW_AUDITS}"
                    styleClass="pic" />
            </h:commandLink>

正在执行的代码如下:

private String createAuditManager(String className, String param, Object objectToAudit,
        String auditFileName) {
    AuditManagerBean amb = (AuditManagerBean) FacesUtils
            .getManagedBean(BeanNames.AUDIT_MANAGER_BEAN);
    if (amb == null) {
        amb = new AuditManagerBean();
    }
    try {
        amb.set_serviceLocator(this.get_serviceLocator());
    } catch (Exception e) {
        e.printStackTrace();
    }
    amb.set_AuditClassName(className);

    amb.set_AuditId(param);
    amb.set_AuditList(null);
    amb.set_AuditFileName(auditFileName);
    amb.set_ObjectToAudit(objectToAudit);

    amb.set_AuditFilterInit(this._FilterInit);
    amb.set_AuditFilterEnd(this._FilterEnd);
    FacesUtils.setManagedBeanInSession(BeanNames.AUDIT_MANAGER_BEAN, amb);
    return "showAudits";
}

public String actionCreateUserAuditManager() {
    if (this._SelectedUser == null) {
        FacesUtils.addErrorMessage("Error al listar usuarios");
        return this.createAuditManager(CUsuarioRegistrado.NAME_FOR_AUDIT, "", null,
                "Auditoría para " + this._SelectedUser);
    }
    return this.createAuditManager(CUsuarioRegistrado.NAME_FOR_AUDIT,
            this._SelectedUser.toString(), null, "Auditoría para " + this._SelectedUser);
}

这将返回一个“showAudits”字符串。根据我的导航规则,这个String必须打开这个链接:auditInfo.xhtml。

<navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <description></description>
        <from-outcome>sm_gestiondocumental_ListGrupoEntrega</from-outcome>
        <to-view-id>/modules/sm_gestiondocumental/ges_tiposentrega/tiposGrupoList.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <description></description>
        <from-outcome>sm_gestiondocumental_ListEmpresa</from-outcome>
        <to-view-id>/modules/sm_gestiondocumental/ges_empresas/empresasList.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <description></description>
        <from-outcome>sm_gestiondocumental_ListTrabajo</from-outcome>
        <to-view-id>/modules/sm_gestiondocumental/ges_trabajos/trabajosList.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <description></description>
        <from-outcome>sm_gestiondocumental_ListSeccion</from-outcome>
        <to-view-id>/modules/sm_gestiondocumental/ges_secciones/seccionesList.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <description>
        </description>
        <from-outcome>showAudits</from-outcome>
        <to-view-id>/modules/sm_gestiondocumental/auditInfo/auditInfo.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

规则得到了很好的应用,但是,页面正在我的应用程序的主面板中打开,我的意思是,打开了一个新的浏览器选项卡,但整个应用程序正在显示,其中包含 auditInfo.xhtml 内容,以便仅显示auditInfo.xhtml 页面。

这似乎是一些过滤问题,因为我的应用程序 bean 的 setContent() 方法是在调用 org.ajax4jsf.Filter 之后调用的。但是我不希望调用该方法。有任何想法吗?

4

1 回答 1

0

解决。该标签位于 a4j:outputPanel 中,因此,即使它没有自动设置为 ajaxRender,richfaces 也会对该请求使用 ajax 过滤器。那个过滤器导致了这个问题。将 a4j:outputPanel 更改为 ah:panelGroup 已解决。

于 2012-07-13T12:52:00.393 回答