1

我们正在从 JSF 1.x 迁移到 JSF 2,我非常期待使用许多新特性。我一直在四处寻找,似乎无法找到原因和/或解决我在显式导航时遇到的问题,其中 h:commandButton 位于数据表中。

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

如果这不起作用那么很好,但我很好奇是否有人遇到过这个问题以及是否有解决方案。

项目信息:

  1. JSF 2.x
  2. 围绕表单的 Facelet 模板
  3. 富脸

例如,以下代码是我的一个页面的经过清理的子集:

    <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>

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

4

2 回答 2

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>
于 2012-12-15T06:51:43.337 回答
0

我终于能够克服这一点。这个问题存在于我的页面 template.xhtml 后面的代码中。在这个模板支持代码中,我试图拉出一个由 servlet 在会话中设置的 UserSesion 对象(@SessionScoped),使用:

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

于 2012-12-21T18:41:18.430 回答