我正在从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
答案 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。