【问题标题】:JSF missing "javax/servlet/jsp/jstl/core/Config" on a xhtml fileJSF 在 xhtml 文件中缺少“javax/servlet/jsp/jstl/core/Config”
【发布时间】:2014-03-02 04:28:25
【问题描述】:

我正在研究仅在第一个选择菜单未设置为“P”或“N”时才可见的面板组选择菜单。我找到了一个示例,但在我尝试之前,我收到了一条错误提示

java.lang.NoClassDefFoundError: javax/servlet/jsp
/jstl/core/Config

这很奇怪,因为我确定我使用的是 jsf 2.2。我的项目库中唯一的 jar 文件是:

javax.faces-2.2.5.jar

以下是我根据找到的示例编写的新代码部分。

<!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:h="http://xmlns.jcp.org/jsf/html"
   xmlns:f="http://java.sun.com/jsf/core" >


<h:body>
<h:form>    
<b>Blue tooth test: </b>  
     <h:selectOneMenu value="#{qcFormBean.dliStickerValue}">
     <f:selectItem itemValue="P" itemLabel="Pass" />
     <f:selectItem itemValue="N" itemLabel="N:A" />
     <f:selectItem itemValue="M" itemLabel="FAIL-Mechanical" />
     <f:selectItem itemValue="E" itemLabel="FAIL-Electrical" />
     <f:selectItem itemValue="C" itemLabel="FAIL-Cosmetic" />
     <f:selectItem itemValue="S" itemLabel="FAIL-Software" />
     <f:ajax event="change" execute="@this" render="perfbyDliSticker" />
</h:selectOneMenu>

<h:panelGroup id="perfbyDliSticker">
    <h:selectOneMenu value="#{qcFormBean.stickerFreq}"
                 rendered="#{!qcFormBean.dliStickerValue eq 'P' or !qcFormBean.dliStickerValue eq 'N'}">
<f:selectItem itemValue="O" itemLabel="Often" />
<f:selectItem itemValue="S" itemLabel="Seldom" />                
</h:selectOneMenu>


是我做错了什么,还是我试图渲染它的方式不是 JSF-ish,或者我错过了更多文件,因为我之前添加了这些文件

jsf-api.jar jstl-1.2.jar jsf-impl.jar

但后来我在 Eclipse 中遇到了一个 tomcat 错误,说该文件现在是一个 jsp 文件而不是一个 jsf 文件,需要添加到 web.xml 中。所以肯定有别的办法。

--------更新-----

对我的代码进行了更改是更新:

<h:selectOneMenu value="#{qcFormBean.dliStickerValue}">
<f:selectItem itemValue="P" itemLabel="Pass or Not applicable" />
<f:selectItem itemValue="M" itemLabel="FAIL-Mechanical" />
<f:selectItem itemValue="E" itemLabel="FAIL-Electrical" />
<f:selectItem itemValue="C" itemLabel="FAIL-Cosmetic" />
<f:selectItem itemValue="S" itemLabel="FAIL-Software" />
<f:ajax event="change" execute="@this" render="perfbyDliSticker" />
</h:selectOneMenu>

<h:panelGroup id="perfbyDliSticker">
<h:selectOneMenu value="#{qcFormBean.performedByRoleID}"
                 rendered="#{!qcFormBean.dliStickerValue eq  'P'}">
<f:selectItem itemValue="A" itemLabel="Always" />                
<f:selectItem itemValue="O" itemLabel="Often" />
<f:selectItem itemValue="S" itemLabel="Seldom" />                
</h:selectOneMenu>

--更新 2_----- 添加我的 web.xml 看看是否有帮助。

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                                               http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0">
  <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
  <param-name>javax.faces.PROJECT_STAGE</param-name>
  <param-value>Development</param-value>
  </context-param>
  <context-param>
  <description>State saving method: 'client' or 'server' (default). See JSF Specification section 2.5.2</description>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
  </context-param>
 <welcome-file-list>
<welcome-file>index.jsf</welcome-file>
<welcome-file>welcome.jsf</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>

【问题讨论】:

  • 好像jar文件名不对javax.faces-2.2.5.jar重命名为javax.faces.jar
  • 我重命名了 Jar 但错误仍然存​​在。
  • ok 尝试导入jar文件并将其添加到项目类路径/WEB-INF/lib ?
  • 它已经添加到我那里,我所做的只是在 /WEB-INF/lib 路径上更改它的名称。我想我的面板组的渲染语法可能不正确或其他什么。
  • 第二个selectOneMenu中的值有编译语法错误#{qcFormBean.}你需要确定qcFormBean托管bean中的哪个值在渲染成功后取它?

标签: jsp jsf jsf-2


【解决方案1】:

错误表明类javax.servlet.jsp.jstl.core.Config 丢失。该类是 JSTL 的一部分,Tomcat 默认不提供该类。

您必须确保jstl-1.2.jar 存在于您的/WEB-INF/lib 中(连同JSF api 和impl jars)。

另请参阅:

【讨论】:

  • 我添加了它,现在我得到了与以前相同的错误,它甚至没有将其显示为 jsf 文件:警告:JSF1091:找不到文件 /QcFormDean.jsp 的 mime 类型。要解决此问题,请将 mime 类型映射添加到应用程序 web.xml。
  • 也许您可以将您的web.xml 添加到问题中。
  • 新问题无关。打开一个新问题。目前的问题解决了。
【解决方案2】:

一个好的结构化 xhtml 可能是这样的(&lt;h:head&gt;...&lt;/head&gt; 对 jsf ajax 很重要):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      >
<h:head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <h:outputStylesheet name="stylesheet.css"/>
    <title>Test</title>    
</h:head>
<body>
<f:view> 
<h:outputText value="hello"></h:outputText>
.....
</f:view>
</body>
</html>

如果您仍然有该错误,请尝试以下操作:

在 Eclipse (Kepler EE) 中创建一个新的动态 web 项目:

1) 菜单项文件 -> 新建 -> 动态 web 项目

2) 然后输入您的项目名称

3) 目标运行时(你的 tomcat 服务器)

4) 模块版本 3.0

5) 配置:Java Server Faces 2.2 项目

6)next->next->,然后选中复选框“generate web.xml ...”

7) next -> JSF Implementation Library (Type: user Library): 在右边你会看到一个下载图标(点击它,然后等待,你会得到Mojarra 2.2 ...),选择并安装,完成!​​

然后复制我上面的 xhtml 并在你的页面中测试它(不要忘记在 URL 中添加你的 Faces Servlet 模式,就像在你的 web.xml 中一样)

【讨论】:

  • 遗憾的是它确实有头,我只是认为在这里展示它并不重要,因为它就像你展示的那样简单。
  • @GilbertV:创建一个新项目,如上所示,eclipse 将正确添加库!
  • 但是如果我删除了面板组信息和渲染信息页面显示正常,这让我认为我使用的代码部分是错误的或不正确的。
  • 我不知道是不是我,我最终按照你说的做了,只是在 eclipse 中创建了一个新的动态 web 项目来摆脱这个错误。
猜你喜欢
  • 2016-01-04
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 2012-09-23
  • 2011-12-24
  • 2021-10-12
相关资源
最近更新 更多