2

这是我第一次尝试使用 JSCookMenu,它的主页(http://jscook.yuanheng.org/JSCookMenu/)已经关闭了一个多星期,如果我的问题的答案应该出现在上面,请原谅我。

我有一个简单的网络应用程序,为了测试 JSCookMenu 的动作转发到一个新的 JSF 页面而进行了精简。

我有一个带有 JSCookMenu(Apache MyFaces Tomahawk 标签)的管理页面,其中包含 2 个菜单项,“没有 AL 的主页”和“有 AL 的主页”。我希望当我单击这些菜单项时,我将导航到“主页”页面,该页面现在只显示“Hello World”消息。然而,这种导航并没有发生。非常感谢朝着正确的方向推进:-)

这是我的 faces-config、我的管理页面(使用布局页面)、我的主页、我的 web.xml(映射了过滤器)以及单击菜单项时发生的情况的描述。

面孔-config.xml:

    <!-- Copyright 2004-2006 Sun Microsystems, Inc. All rights reserved.
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. -->

    <faces-config 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-facesconfig_1_2.xsd"
version="1.2">

    <!-- from project setup -->
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> 
</application>

    <navigation-rule>
        <navigation-case>
            <from-outcome>go_home</from-outcome>
            <to-view-id>/home.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

</faces-config>

布局.xhtml:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html" 
  xmlns:m="http://code.google.com/p/gmaps4jsf/">
    <head>

    <title>
        <ui:insert name="title">Beach Water Quality</ui:insert>
</title>

    <!-- JSCook Menu -->
    <script language="JavaScript" src="jscookmenu/JSCookMenu.js" type="text/javascript" />
 <script language="JavaScript" src="jscookmenu/ThemeOffice/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemeOffice/theme.css" type="text/css" />
 <script language="JavaScript" src="jscookmenu/ThemeMiniBlack/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemeMiniBlack/theme.css" type="text/css" />
 <script language="JavaScript" src="jscookmenu/ThemeIE/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemeIE/theme.css" type="text/css" />
 <script language="JavaScript" src="jscookmenu/ThemePanel/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemePanel/theme.css" type="text/css" />
 <script language="JavaScript" src="jscookmenu/ThemeGray/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemeGray/theme.css" type="text/css" />
 <script language="JavaScript" src="jscookmenu/ThemeOffice2003/theme.js" />
 <link rel="stylesheet" href="jscookmenu/ThemeOffice2003/theme.css" type="text/css" />

</head>

    <body onLoad="#{onload}">

 <h:panelGrid id="container_div" forceId="true" >

  <ui:insert name="header">
   <ui:include src="header.xhtml"/>
</ui:insert>

  <ui:insert name="content">
       <!-- include default content in here -->
</ui:insert>

  <ui:insert name="footer">
   <ui:include src="footer.xhtml"/>
</ui:insert>

</h:panelGrid>

</body>

</html>

管理员.jsp:

    <jsp:forward page="admin.jsf"/>

管理员.xhtml:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html 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:m="http://code.google.com/p/gmaps4jsf/"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:t="http://myfaces.apache.org/tomahawk" > 

 <ui:composition template="/WEB-INF/layout/layout.xhtml">
  <ui:define name="content"> 
   <f:view contentType="text/html">
    <h:form id="form" >           
        <t:jscookMenu layout="vbr" theme="ThemeIE">
            <t:navigationMenuItem itemLabel="Home" itemValue="go_home" action="go_home"/>
    </t:jscookMenu>
</h:form>
</f:view> 
</ui:define>
</ui:composition>
</html>

主页.jsp:

    <jsp:forward page="/home.jsf"/>

主页.xhtml:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html 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:m="http://code.google.com/p/gmaps4jsf/"
 xmlns:c="http://java.sun.com/jstl/core" >

 <ui:composition template="/WEB-INF/layout/layout.xhtml">

  <ui:define name="content">

   <f:view contentType="text/html">
    <h:form id="form" >
     <h:outputText value="Hello World"/>     
</h:form>
</f:view> 

</ui:define>

</ui:composition>
</html>

网页.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
 <description>Beachwater web.xml</description>

   <!-- Use Documents Saved as *.xhtml -->
   <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

   <!-- Special Debug Output for Development -->
   <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

   <!-- Optional JSF-RI Parameters to Help Debug -->
   <context-param>
    <param-name>com.sun.faces.validateXml</param-name>
    <param-value>true</param-value>
</context-param>
   <context-param>
    <param-name>com.sun.faces.verifyObjects</param-name>
    <param-value>true</param-value>
</context-param>


   <!-- Faces Servlet -->
   <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

   <!-- Faces Servlet Mapping -->
   <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

   <!-- This is for File Upload -->
   <filter>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
       <init-param>
    <description>Set the size limit for uploaded files.
    Format: 10 - 10 bytes
     10k - 10 KB
     10m - 10 MB
     1g - 1 GB
</description>
    <param-name>uploadMaxFileSize</param-name>
    <param-value>20m</param-value>
   </init-param>
       <init-param>
    <description>
    Set the threshold size - files below this limit are stored 
    in memory, files above this limit are stored on disk.
 Format: 10  - 10 bytes
  10k - 10 KB
  10m - 10 MB
  1g  - 1 GB
</description>
    <param-name>uploadThresholdSize</param-name>
    <param-value>100k</param-value>
   </init-param>
       <init-param>
    <description>
    Set the path where the intermediary files will be stored.
</description>
    <param-name>uploadRepositoryPath</param-name>
    <param-value>/temp</param-value>
   </init-param>
</filter>

   <!-- extension mapping for adding     <script/>,     <link/>, and other resource tags to JSF-pages  -->
   <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
       <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

   <!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.)  -->
   <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>

</web-app>

我的类路径中有 tomahawk12-1.1.9.jar(也尝试过 tomahawk-1.1.9.jar),我从http://myfaces.apache.org/tomahawk/download.html下载了它。

我的 webapp 根目录有一个 jscookmenu 文件夹,其中包含每个主题的文件夹(每个主题都有 theme.css 和 theme.js)、effect.js 和来自 jscookmenu-2.0.4.zip 的 JSCookMenu.js,所有这些我从http://sourceforge.net/projects/jscook/files/下载。最新版本是 2009-05-25。

Web 应用程序部署在本地主机上的 Sun GlassFish Enterprise Server v2.1 上。
我浏览到http://localhost:8080/beachwater/admin.jsp并单击 Home 菜单项。
新窗口打开,地址栏“ http://localhost:8080/beachwater/form_j_id7_menu:A%5Dgo_home ”和内容“Glassfish 错误页面,HTTP 状态 404:请求的资源 () 不可用。”

没有任何内容写入 server.log

JSCookMenu.js 中的 cmItemMouseUp 函数正在打开该窗口。我有错误的 javascript 版本吗?任何想法为什么过滤器不调用 faces-config 中指定的操作?

4

1 回答 1

1

事实证明, http: //myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_jscookMenu.html上的“说明”部分已过时。不再需要...

  • 将包含 css 和脚本代码的 jscookmenu 目录添加到您的 web 目录(您可以在示例应用程序中找到它)。
  • 将您想要使用的主题的脚本和样式表添加到 html-header(另请参见示例应用程序中的 inc/header.inc)

...因为这些现在包含在战斧罐中。因此,我从 webapp 的根目录中删除了上述 jscookmenu 文件夹,以及 layout.xhtml 头部的这些文件夹:

<!-- JSCook Menu -->
<script language="JavaScript" src="jscookmenu/JSCookMenu.js" type="text/javascript" />
<script language="JavaScript" src="jscookmenu/ThemeOffice/theme.js" />
<link rel="stylesheet" href="jscookmenu/ThemeOffice/theme.css" type="text/css" />
etc.

我也没有在 web.xml 的过滤器映射中包含 *.jsp,所以我添加如下:

<filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

至此,菜单正在页面上呈现。

然后,当我尝试从一个页面导航到另一个页面时,出现此错误:

dummyForm.elements.jscook_action is undefined

,我通过将其添加到 admin.jsp 来解决,正如http://forums.sun.com/thread.jspa?forumID=427&threadID=761310所建议的那样:

<input type="hidden" id="jscook_action" name="jscook_action" />

希望这对某人有所帮助,因为 JSCookMenu 网站仍然关闭,并且其他地方的帮助似乎很薄弱。

于 2010-08-12T07:19:29.403 回答