【问题标题】:how: Partial Rage Rendering with jsp2/facelets/templating with menu driving main content refresh only?如何:使用 jsp2/facelets/模板进行部分愤怒渲染,仅通过菜单驱动主要内容刷新?
【发布时间】:2011-09-30 20:24:49
【问题描述】:

我发现 BalusC(urs 的忠实粉丝)的一些帖子和其他关于堆栈溢出的帖子并没有找到解决方案,这似乎是许多人希望能够做到的。

如果我有这样的 facelets/模板结构,左导航 带有驱动在主要内容区域中显示的内容的链接,但没有做 一个完整的页面刷新,我只想更新主区域,我该怎么做?

------------------------------------- |链接1 |显示链接 1 的内容 | |链接2 |单击链接1时| |链接2 |在左侧导航区 | | | | -------------------------------------

我看到 primefaces 展示柜在单击左侧菜单项时会刷新整个页面,奇怪的是,richfaces4 展示柜没有,尽管我正在查看代码,但目前还无法理解。有没有一个例子可以告诉我如何做到这一点?

这是我的代码

uiTemplate.xhtml(主模板)

<div>
        <div id="left">
            <ui:include src="navigationMenu.xhtml"/> 
        </div>

        <div id="center_content" class="center_content">
            <ui:insert name="center_content" />
        </div>
</div>

然后我的 navigationMenu.xhtml 看起来像

<ui:composition>
        <rich:collapsiblePanel header="ClickMe" switchType="client">                   
            <h:link outcome="page1" value="goto page1" /><br />
            <h:link outcome="page2" value="goto page2" /><br />
            <h:link outcome="page3" value="goto page3" /><br />
        </rich:collapsiblePanel>
</ui:composition>

以及将出现在中心内容区域中的页面之一,希望已加载 没有完全刷新所有部分。

我想我会需要一些 f:ajax 标记或对上面的这些链接使用 h:commandLink 但还没有找到一个好的 例子。我看到一堆关于 Mojarra 2.1.x 修复动态包括但 不确定是否与此有关,除非这是完成此任务的唯一方法。

page1.xhtml

<ui:composition template="./uiTemplate.xhtml">
        <ui:define name="center_content">
             page 1 content
        </ui:define>
</ui:composition>

【问题讨论】:

    标签: java ajax templates jsf facelets


    【解决方案1】:

    我想出了如何让某些东西正常工作,但是,我没有做太多测试,比如添加 除了 a4j:commandLink 元素之外,导航表单中还有更多组件。我当前的导航部分只是用 ajx 请求中的新内容更新中心内容,因此没有进行完整的页面刷新,没有详细说明,这是我的 navigationMenu.xhtml 文件

    <ui:composition>
         <h:form>             
            <rich:collapsiblePanel header="Carriers" switchType="client">                   
                <a4j:commandLink  action="page1" value="goto page1.xhtml" render=":centerContentDiv"/><br />
                <a4j:commandLink  action="page2" value="goto page2.xhtml" render=":centerContentDiv"/><br />
            </rich:collapsiblePanel>
         </h:form>
    

    然后是我的主模板 uiTemplate.xhtml 像这样在里面有一个sn-p

    <div>
            <div id="left">
                <ui:include src="navigationMenu.xhtml"/> 
            </div>
    
                <h:panelGroup id="centerContentDiv" layout="block"> 
                    <ui:insert name="center_content" />
                </h:panelGroup>
    
        </div>
    

    我确实注意到这似乎有点奇怪,即使在我非常小的测试应用程序中也是如此。 点击链接时我必须非常慎重,否则它似乎忽略了我

    我想我需要从 primefaces 添加 facestraces 才能看到 如果它告诉我发生了什么事

    我希望这对那里的人有所帮助

    *** 跟进 *****

    作为后续,经过一些测试,如果包含的中心内容随后 包含表单,提交这些表单似乎仅在第二次单击 commandLink 或 commandButton 时发生。表单没有嵌套,这是表单无法正确提交BalusC comments here 的常见原因。我添加了facetraces,它确实命中了服务器,但从恢复视图跳转到渲染响应,第二次单击它会经历所有阶段。

    导航 uiComposition 具有 h:form 并且中心内容 uiComposition 具有 h:form 的事实导致了问题。我知道这一点,因为如果我删除导航 uiComposition,并通过键入的 URL 直接加载中心内容,那么它的表单会在第一次点击时正确提交。我认为 BalusC 在 post on partial page rendering 中提到了一些关于此的内容,但在那篇文章中没有完整的示例,我有点难以理解。这将是我认为许多人想要实现的常见任务,所以我会继续挖掘。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2020-04-01
    • 2011-02-25
    • 2012-06-23
    相关资源
    最近更新 更多