1

我正在从 RF3.3.3、JSF1.2 和 jboss 5 迁移到 JSF2/RF4。我们有一个丰富的工具栏组,其中包含从数据库表生成的下拉菜单。我对 web.xml 进行了更改,重命名了支持 bean 中的适用组件,但工具栏将仅显示为文本,而不是下拉菜单和链接。

网页.xml:

<?xml version="1.0"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <context-param>
  <param-name>org.richfaces.enableControlSkinning</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>org.richfaces.enableControlSkinningClasses</param-name>
  <param-value>false</param-value>
 </context-param>

 <context-param>
  <param-name>org.richfaces.resourceOptimization.enabled</param-name>
  <param-value>true</param-value>
 </context-param>

 <context-param>
  <param-name>org.richfaces.skin</param-name>
  <param-value>blueSky</param-value>
 </context-param>

menu.xhtml - 包含在带有 h:head 和 h:body 标签的 template.xhtml 中:

<h:form id="mnMenu">
<rich:toolbar id="tb" >
    <rich:toolbarGroup>
    <s:link id="menuHomeId" view="/home.xhtml" value="Home" propagation="none"/>
    </rich:toolbarGroup>

    <rich:toolbarGroup binding="#{menuQueries.myBarGrp}" />

</rich:toolbar>
<!-- account for jsf bug? bug DOESN'T WORK -->
    <rich:toolbar rendered="false"/>
    <rich:toolbarGroup rendered="false"/>
    <rich:dropDownMenu rendered="false"/>
    <rich:menuGroup rendered="false"/>
    <rich:menuItem rendered="false"/>
</h:form>

从 backing bean - 这个方法创建工具栏组,它最初看起来像这样:

public HtmlToolBarGroup getMyBarGrp()
{
     this.myBarGrp = new org.richfaces.component.html.HtmlToolBarGroup();
     for (CtsPermissionHierarchyAltV each : this.getMainMenuList()) {
          this.myBarGrp.getChildren().add(getDropDownMenu(each));
     }
return this.myBarGrp;
}

我把它改成了这个,两者都产生相同的输出:

public UIToolbarGroup getMyBarGrp()
{
     FacesContext ctx = FacesContext.getCurrentInstance();
     this.myBarGrp = (UIToolbarGroup) ctx.getApplication().createComponent(ctx,     
      UIToolbarGroup.COMPONENT_TYPE, "org.richfaces.ToolbarGroupRenderer");
     this.myBarGrp.setId("dynMenuGrp");
     for (CtsPermissionHierarchyAltV each : this.getMainMenuList()) 
     {    
          this.myBarGrp.getChildren().add(getDropDownMenu(each));
     }
}

getDropDownMenu 和 submenu 方法的编码类似。我没有收到任何错误。应该是下拉菜单的文本的 FF firebug 输出如下所示:

<div id="mnMenu:Communications" class="rf-ddm-lbl rf-ddm-unsel ">
... more stuff

迁移前它看起来像这样:

<div id="mnMenu:Communications" class="rich-ddmenu-label rich-ddmenu-label-unselect">
... more stuff

浏览萤火虫输出我可以看到所有的子菜单——但它们都是文本引用。我看到了我所有的 css 文件——它们出现在身体而不是头部,但它们都在那里。我错过了什么?我还能检查什么?

jboss 7.1.1 接缝 2.3.0 JSF2.1 RichFaces 4.2.2

4

2 回答 2

3

很可能是资源问题。当您在 Firebug 中选择一项时,您是否看到任何匹配的 CSS 声明(rf-ddm-lbl 或 rf-ddm-unsel)?您是否在使用 firebugs net tab 时检查了任何 404 错误?

顺便说一句:应该在标题中引用 CSS 文件。

于 2012-11-10T19:46:05.583 回答
1

在这里找到了答案。我需要添加

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>org.richfaces.webapp.ResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
 <servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/org.richfaces.resources/*</url-pattern>
</servlet-mapping>

到 web.xml。不知道为什么它会起作用,这个解决方案适用于使用 servlet2.5 的容器,并且(据我所知)我使用的是 servlet3.0。

claudegex 你的回答让我走上了修复它的道路 - 实际上有 404 错误。赏金结束后我会标记这个正确的,你应该得到它的 1/2。

于 2012-11-13T00:41:44.110 回答