【问题标题】:org.apache.jasper.JasperException: /JSP/BillingPayment.jsp(15,3) No tag "ajax" defined in tag library imported with prefix "f"org.apache.jasper.JasperException: /JSP/BillingPayment.jsp(15,3) 在前缀为“f”的标签库中没有定义标签“ajax”
【发布时间】:2011-03-29 07:06:15
【问题描述】:

对 JSF 2 有一些疑问,我只想使用 JSF 2 的 ajax 功能,不打算使用它的任何实现。

已从 http://download.java.net/maven/2/com/sun/faces/jsf-api/2.1.1-b03/ 获取 JSF 库

但这些仍然不支持我用来实现功能的 ajax 标签。

我得到了错误 org.apache.jasper.JasperException: /JSP/BillingPayment.jsp(15,3) 在以“f”为前缀导入的标签库中没有定义标签“ajax” 用于以下请求。

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<html>
<body>
<h:form>
    <h:panelGrid>
        <h:inputText value="#{dataTableBean.sponsorID}">
            <f:ajax event="keyup" />
        </h:inputText>
        <h:outputText id="text" value="#{dataTableBean.sponsorID}" />
    </h:panelGrid>
</h:form>
</body>
</html>

我想,我没有合适的库,请你给我正确的支持 ajax 的 JSF2 库。

【问题讨论】:

  • 我的 JSP &lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt; &lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt; &lt;html&gt; &lt;body&gt; &lt;h:form&gt; &lt;h:panelGrid&gt; &lt;h:inputText value="#{dataTableBean.sponsorID}"&gt; &lt;f:ajax event="keyup" /&gt; &lt;/h:inputText&gt; &lt;h:outputText id="text" value="#{dataTableBean.sponsorID}" /&gt; &lt;/h:panelGrid&gt; &lt;/h:form&gt; &lt;/body&gt; &lt;/html&gt;
  • 有什么特别的原因让您仍然更喜欢旧版 JSP 而不是它的 superios 继任者 Facelets?
  • 当前系统在 JSP 中,我们正在用 JSF 重新设计它,所以目前正在提供一个 POC,分析 JSF 的效率以及它与我们的应用程序的匹配程度。
  • 但是你能告诉我为什么没有一个 JSF2 库 IMPL/CORE tld 没有 ajax 标签吗?

标签: jsf-2


【解决方案1】:

您必须使用 Facelets 技术。你的sth.xhtml 会有这个表格

<?xml version='1.0' encoding='UTF-8' ?>
<!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://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
    <link rel="stylesheet" type="text/css" href="my.css" />
</h:head>
<h:body>
</h:body>
</html>

如果您在创建 jsf 页面时使用的是 netbeans ide 7.1,请检查 faceletes 选项。 我有一个类似的问题 h:outputScript not defined in library h.

【讨论】:

    【解决方案2】:

    您的链接指向 jsf-api.jar。您还需要 jsf-impl.jar,您可以在 this directory 中找到它。

    如果您的类路径中同时包含两者,您应该能够访问 TLD。我认为没有 jsf-impl.jar 就无法使用 jsf。

    此外,您必须在页面上使用f:view 标签包含所有组件标签。所以你的页面应该有以下结构:

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    
    <f:view>
     <html>
      <body>
        <h:form>
          <h:panelGrid>
            <h:inputText value="#{dataTableBean.sponsorID}">
              <f:ajax event="keyup" />
            </h:inputText>
            <h:outputText id="text" value="#{dataTableBean.sponsorID}" />
          </h:panelGrid>
       </h:form>
      </body>
     </html>
    </f:view> 
    

    【讨论】:

    • 是的,也采用了 JSF impl,仅供参考,从我所采用的地方,给出了路径。
    • 更新了我对f:view的回答。
    • 感谢马特,仍然收到错误 - 不知道为什么那些 tld 没有 ajax 元素
    • org.apache.jasper.JasperException: /JSP/BillingPayment.jsp(12,4) 在以“f”前缀导入的标签库中没有定义标签“ajax”
    猜你喜欢
    • 2017-03-09
    • 2014-04-09
    • 2012-06-28
    • 1970-01-01
    • 2012-05-13
    • 2011-03-13
    • 2019-03-16
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多