JSF 2显式导航数据表

时间:2012-12-14 22:23:43

标签: jsf-2

我们正在从JSF 1.x迁移到JSF 2,我真的很期待使用许多新功能。我一直在搜索,似乎无法找到一个理由和/或解决我遇到的显式导航问题,其中h:commandButton在dataTable中。

如下所示,“Working”链接正确地重定向到“testPage.xhtml”,但“NOT Working”链接没有。它会将您带回到您当前所在的页面。这些页面存在于同一目录中。

如果这不行则那么好,但我很好奇是否有人遇到过这个问题并且有解决方案。

项目信息:

  1. JSF 2.x
  2. 表格模板
  3. RichFaces的
  4. 例如,以下代码是我的一个页面的清理子集:

        <h:form id="formListHome">
            <h:commandLink id="clWorkingExplicitLink" 
                        action="testPage.xhtml?faces-redirect=true">Working</h:commandLink>     
    
            <h:panelGroup id="pGrpExistingListUser" rendered="true">
    
                <h:panelGrid id="pGridListTable" columns="1">
    
                    <rich:extendedDataTable id="edtLists"
                        value="#{listHomeBacking.modelUserLists}"
                        var="userList"
                        selectionMode="none"
                        columnClasses="pull-center, pull-left, pull-center">
    
                        <!-- List Title -->
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="List Title" />
                            </f:facet>
                            <h:commandLink value="#{userList.titleName}" action="#{listHomeAction.previewList}" />
                        </h:column>
    
                        <!-- List Title -->
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="List Edit" />
                            </f:facet>
                            <h:commandLink id="clNOTWorkingExplicitLink" 
                                        action="testPage.xhtml?faces-redirect=true">NOT Working</h:commandLink>     
    
                        </h:column>
    
                    </rich:extendedDataTable>
    
                </h:panelGrid>
            </h:panelGroup>
        </h:form>
    

    任何想法或方向可以帮助解决这个问题并更好地理解它为什么不起作用,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

代码似乎正确,但上下文可能会影响您的结果。您是否检查过web.xml中jsf页面的url-mapping是* .xhtml,如您的代码所示。如果它是* .faces则不起作用。

所以你应该拥有:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

不是那样:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>

答案 1 :(得分:0)

我终于能够超越这个了。我的页面template.xhtml背后的代码中存在该问题。在这个模板支持代码中,我试图提取一个UserSesion对象(@SessionScoped),该对象由servlet使用以下方式设置在会话中:

HttpSession session =(HttpSession)FacesContext.getCurrentInstance()。getExternalContext()。getSession(true); this.userSess =(UserSessionTO)session.getAttribute(“userSession”);

然后使用以下方法在更改某些项目后手动将其推回到会话:

FacesContext.getCurrentInstance()。getExternalContext()。getRequestMap()。put(“userSession”,userSess);

问题是每次请求都发生这种情况,我认为最终导致我的数据表的问题因每个请求而异。

不确定我是否应该在我的回答中做到这一点,但我必须从本网站获得以下问题/答案,以帮助我回过头来看看问题是什么。我发布问题后发现它很有帮助,并没有让我朝着正确的方向前进,但它确实有所帮助。

JSF 2.0 commandLink in datatable