【问题标题】:JSF 2 Explicit Navigation DatatableJSF 2 显式导航数据表
【发布时间】:2012-12-14 22:23:43
【问题描述】:

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

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

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

项目信息:

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

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

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

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

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    代码看似正确,但上下文可能会影响您的结果。您是否检查过 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>
    

    【讨论】:

    • 当我第一次创建项目时,我将 *.faces 作为映射,因为它是我项目生成的默认设置,它只会尝试下载我的 xhtml 文件。我做了仔细检查,只是为了确保我的 servlet 映射是正确的,并且我确实拥有它,正如您在上面描述的 *.xhtml。
    【解决方案2】:

    我终于能够克服这一点。这个问题存在于我的页面 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 in datatable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多