JSF 2.2.9升级后JSP表单语法错误及资源不存在问题咨询
解决JSF 2.2.9升级后的标签库及JS语法错误问题
一、标签库资源不存在的解决办法
- 补充完整JSF依赖:JSF 2.2.9需要同时包含API和实现包,仅引入
jsf-api-2.2.9.jar是不够的。需添加对应的实现包,比如jsf-impl-2.2.9.jar(或Mojarra合并后的javax.faces-2.2.9.jar),确保两个包版本一致,并部署到项目的WEB-INF/lib目录。 - 检查web.xml配置:JSF 2.2要求Servlet版本至少为3.0,确保
web.xml的根元素声明为<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.0">及以上。若使用旧版Servlet(如2.5),需手动配置FacesServlet:<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> - 确认标签库URI有效性:你使用的
http://xmlns.jcp.org/jsf/core和http://xmlns.jcp.org/jsf/html是JSF 2.2的标准URI,若服务器仍提示资源不存在,检查项目部署时JSF包是否被正确加载(比如IDE部署时是否遗漏了lib目录)。
二、JS中嵌套<h:outputText>的语法错误解决办法
旧版JSF可能允许在JS中直接嵌套组件标签,但JSF 2.2的渲染机制更严格,<h:outputText>会被渲染为HTML元素(如<span>true</span>),直接放入JS变量赋值会导致语法错误。推荐两种修正方式:
方式1:直接在JS中使用EL表达式
无需嵌套组件标签,直接将EL表达式写入JS,JSF会直接解析为对应的值:
var isError = #{billpayuploadbean.m_bError};
注意:确保当前JSP页面被FacesServlet处理(即访问路径匹配FacesServlet的url-pattern),否则EL不会被解析。
方式2:通过隐藏域传递值
若EL解析存在上下文问题,可使用隐藏域存储值,再通过JS读取:
<h:inputHidden id="errorFlag" value="#{billpayuploadbean.m_bError}" /> <script> // 使用clientId确保获取正确的DOM元素ID var errorElement = document.getElementById('#{errorFlag.clientId}'); var isError = errorElement.value === 'true'; </script>
内容的提问来源于stack exchange,提问作者Akash Babar
相关产品推荐
相关产品推荐

