Richfaces 4动态创建的丰富组件显示为文本而不是菜单/链接

时间:2012-11-06 21:43:40

标签: jsf jsf-2 richfaces seam

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

的web.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>
来自支持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和子菜单方法的编码方式相似。 我没有收到任何错误。应该是下拉菜单的文本的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

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

jboss 7.1.1 Seam 2.3.0 JSF2.1 RichFaces 4.2.2

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

找到答案here。我需要添加

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