当前位置: 首页 > 面试题库 >

当a4j:included时RichFaces rich:panelMenu停止工作

夏侯阳
2023-03-14
问题内容

从这个先前提出的问题中,我已经注意到,当我将一个rich:panelMenu(在index.jsp页面中正常工作)移入another.jsp然后index.jsp使用a4j:include标记将其包括在内时,该rich:panelMenu功能将停止工作。

这是一个错误吗?

编辑1

响应代码并经过一些隔离测试后,问题似乎出在panelMenu的rich:dataTable另一个选项卡中的一个rich:tabPanel共存。

如果myindex.jsp包含使用演示代码(Bean中的inc)的默认简单panelMenu,则它将按预期工作:

<f:view>
    <rich:page pageTitle="title" markupType="xhtml">
        <h:outputText id="setup" value="#{MyBacking.setup}" />
        <rich:toolBar height="35" itemSeparator="line">
            <rich:toolBarGroup location="left">
                <a4j:form>
                    <a4j:outputPanel id="panel">
                        <h:outputText style="text-align: center" value="Node Select " />
                        <h:selectOneMenu id="nodes" value="#{MyBacking.chosenNode}">
                            <f:selectItems value="#{MyBacking.nodes}" />
                        </h:selectOneMenu>
                        <a4j:commandButton value="Retrieve"
                            reRender="panel,contentPanel"
                            onclick="this.disabled=true" oncomplete="this.disabled=false" />
                    </a4j:outputPanel>
                </a4j:form>
            </rich:toolBarGroup>
        </rich:toolBar>
<!-- added start -->
        <h:form id="form">
            <h:panelGrid columns="2" width="100%">
                <rich:panelMenu style="width:200px" mode="ajax"
                    iconExpandedGroup="disc" iconCollapsedGroup="disc"
                    iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                    iconCollapsedTopGroup="chevronDown">
                    <rich:panelMenuGroup label="Group 1">
                        <rich:panelMenuItem label="Item 1.1"
                            action="#{PanelMenu.updateCurrent}">
                            <f:param name="current" value="Item 1.1" />
                        </rich:panelMenuItem>
                    </rich:panelMenuGroup>
                </rich:panelMenu>
                <rich:panel bodyClass="rich-laguna-panel-no-header">
                    <a4j:outputPanel ajaxRendered="true">
                        <h:outputText value="||#{PanelMenu.current}|| selected"
                            id="current" />
                    </a4j:outputPanel>
                </rich:panel>
            </h:panelGrid>
        </h:form>
<!-- added end -->
        <rich:panel>
            <h:panelGroup layout="block" id="contentPanel">
                <a4j:include viewId="#{MyBacking.viewId}">
                    <f:param name="targetIdParam" value="content" />
                </a4j:include>
            </h:panelGroup>
        </rich:panel>
    </rich:page>
</f:view>

但是,如果我panelMenu从此文件中删除添加的内容,然后将其粘贴到tabPanel外部jsp页面中单独的选项卡中,则该页面a4j:include在上面的d中被index.jsp加载,加载时,panelMenu拒绝运行时(在日志或控制台中不输出任何内容)我的标签集中的另一个标签有一个rich:dataTable。使用完全相同的代码,但是dataTable从第二个选项卡中删除了代码,它们又重新开始工作。

这是a4j:include带有的损坏的d文件panelMenu:

<h:panelGrid columns="1" border="0" style="width: 100%">
    <rich:tabPanel switchType="client" rendered="true">
        <rich:tab styleClass="tab" label="Node Logs">
            <h:panelGrid columns="2" border="0">
                <h:graphicImage value="/btn50.png" width="30" height="30"
                    alt="Logs" />
                <h:outputText value="log: #{MyBacking.chosenNode}"
                    styleClass="pageTitle" />
            </h:panelGrid>

            <h:form id="form">
                <h:panelGrid columns="2" width="100%">
                    <rich:panelMenu style="width:200px" mode="ajax"
                        iconExpandedGroup="disc" iconCollapsedGroup="disc"
                        iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                        iconCollapsedTopGroup="chevronDown">
                        <rich:panelMenuGroup label="Group 1">
                            <rich:panelMenuItem label="Item 1.1"
                                action="#{PanelMenu.updateCurrent}">
                                <f:param name="current" value="Item 1.1" />
                            </rich:panelMenuItem>
                        </rich:panelMenuGroup>
                    </rich:panelMenu>
                    <rich:panel bodyClass="rich-laguna-panel-no-header">
                        <a4j:outputPanel ajaxRendered="true">
                            <h:outputText value="||#{PanelMenu.current}|| selected"
                                id="current" />
                        </a4j:outputPanel>
                    </rich:panel>
                </h:panelGrid>
            </h:form>

        </rich:tab>

        <rich:tab styleClass="tab" label="Docs">
            <rich:dataTable value="#{MyBacking.MyData}">
                <rich:column style="text-align:center" width="150px">
                </rich:column>
            </rich:dataTable>
        </rich:tab>
    </rich:tabPanel>
</h:panelGrid>

谢谢


问题答案:

当我将taglib声明重铸为时,此问题消失了

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

而不是使用<% %>标签(无论如何,它们都不会与facelets一起使用)

并安装jsf-facelets-1.1.14.jar。到目前为止,根本没有安装任何facelets jar!



 类似资料:
  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • 现在,我需要合并一个使用log4j2的库。当我这样做时,我丢失了主应用程序的控制台日志记录(尽管日志消息仍然被写入以编程方式创建的文件追加器)。 我认为,由于文件追加器在原始应用程序中工作,我可以通过在主应用程序中以编程方式创建一个控制台追加器来解决我的问题。然而,我不知道这是对的还是胡说八道。 那么,我的问题是:关于使和log4j2互操作,我需要了解什么一般性的知识吗?如果原始应用程序编码不正确

  • null GrantPermissionRule是否停止了为其他人所宣传的工作?

  • 我使用Pygame和Pydub用Python编写了一个音乐播放器(我使用Pygame实际播放音乐,而Pydub可能与这个问题无关)。 除非我切换到另一个Pygame窗口,否则即使切换了窗口,音乐也能正常工作。我认为如果我编译它(cx_freeze),这种效果会消失,但那不起作用。 所以我想知道是否有什么方法可以让音乐在窗口切换到另一个Pyplay窗口时继续播放。 我使用而不是声音对象,如果可能有某

  • 我在IE上的css悬停有问题。 简化;我基本上有一个容器div,它将在悬停时显示一个小的div,里面有一些标记中选择一个,:hover由于某种原因将不再工作,div将消失。 在chrome/firefox等中尝试此示例以查看所需的结果&然后在IE11中再试一次以查看问题所在。 null null

  • 我正在用Unity 2018.2.2(最新版本于2018年8月8日)开发一款android小游戏。我在这个游戏上工作了几周,但现在,Unity在试图找到我的JDK时毫无理由地失败了。当我分配文件夹时(编辑- [如果您看不到图像:“未能检测到Java版本。Android开发需要JDK 8(1.8)。安装JavaRunatime环境(JRE)是不够的。”] 第一个我想的是,它可能会因为JDK的更新而失