我们正在尝试在 Jsf2.1/Jsp 1.3 上运行 Bootsfaces。我们正在努力将具有 1500 多个 Jsp 文件(JSF1.2)的旧版 jsp 应用程序迁移到 JSF2.1,迁移到 Facelets 将需要付出很多努力,因为我们必须将每个 .jsp 文件转换为 .xhtml 。
因此,我按照您的建议开始了一个演示 Web 应用程序,并创建了一个使用 bootsfaces 的 facelets 登录页面。它工作正常,我能够看到 bootsfaces 内容渲染。现在我想将 bootsfaces 与 Jsp servlets 一起使用,我创建了一个新的 Jsp 页面
当我尝试添加 bootsfaces 标签库时
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://bootsfaces.net/ui" prefix="b" %>
我在第 3 行遇到异常:
绝对 uri“ http://bootsfaces.net/ui ”无法在 web.xml 或应用程序加载的 jar 文件中解析
我在 bootsfaces jar 文件中查看 bootsfaces-b.taglib.xml 文件,我看到了
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib 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-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://bootsfaces.net/ui</namespace>
<tag>
<tag-name>accordion</tag-name>
....
所以我发现问题可能是因为 bootsfaces jar 正在使用 faceless 标签库,而我正在尝试使用 servlet 标签库来使用它并且它无法找到它。所以我想对此进行试验并手动创建了一个具有 servlet 标记的 tld 文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
我通过在 .tld 文件中添加一个标签(inputText)描述进行测试,我更改了格式以匹配 servlet 标签库格式,
<!--made changes like replaced<tag-name> with <name>-->
<tag>
<name>inputText</name>
<tag-class>net.bootsfaces.component.inputText.InputText</tag-class>
<attribute>
<description><![CDATA[Access key to transfer focus to the input element.]]></description>
<name>accesskey</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<description><![CDATA[Activates AJAX. The default value is false (no AJAX).]]></description>
<name>ajax</name>
<required>false</required>
<type>java.lang.Boolean</type>
</attribute>
login.jp 页面上没有显示编译时异常,但是当我尝试运行项目时出现此异常
PWC6197:在 jsp 文件中的第 28 行发生错误:/jsp/login/login2.jsp PWC6199:生成的 servlet 错误:类 org.apache.jasper.runtime.TagHandlerPool 中的方法无法应用于给定类型;
尝试运行此应用程序时出现此错误
必需:java.lang.Class 找到:java.lang.Class
原因:推断类型不符合上限推断:net.bootsfaces.component.inputText.InputText 上限:javax.servlet.jsp。 tagext.JspTag PWC6197:在 jsp 文件中的第 28 行发生错误:/jsp/login/login2.jspPWC6199:生成的 servlet 错误:尝试运行此应用程序时出现此错误找不到符号符号:方法 setPageContext(javax.servlet.jsp.PageContext) 位置:变量 _jspx_th_b_inputText_0 类型为 net.bootsfaces.component.inputText.InputText
您能否建议任何让 bootsfaces 在 jsp 上工作的替代方法