A mistake in JSF Template of Eclipse WTP(Galileo)
Eclipse WTP中提供了模板功能,再创建CSS、HTML、JSP等文件时可以根据不同的标记规范选择不同的格式模板,为开发者提供了方便。其中JSP文件模板就分别提供了html、xhtml、xhtml(xml syntax)三种标记规范的模板,在此三种模板的基础上又提供了三种JSF的页面模板。
基于html标记格式的JSF模板使用起来很正常,其与JSP模板的差别主要就是在<%@ page…>下增加了下面两行(当然<f:view />那是都需要的)
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
使用基于xhtml标记格式的JSF模板就总是会出现“#{..} is not allowed in template text”的错误。通常情况只有纯粹的jsp文件才会提示这种错误,因为其不支持#{}的标记。但是发布过程和访问方式是按照JSF的教程来进行的呀。最后终于发现问题在于这个模板上。
这个模板是在JSP模板的html标记内增加了xmlns:f和xmlns:h的相关内容,如下所示。可是<html>标记是给浏览器读的并不是给web容器读的,因此web服务器无法识别JSF文件中的#{}标记。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
第三种基于xml形式的xhtml标记模板也使用正常,它是在<jsp:root>内增加xmlns:f和xmlns:h的相关内容,这个web容器也是可以处理的。
因此,如果在使用xhtml标记格式的JSF模板时,就得在<%@ page…>的下一行增加上面提到的<%@ tablib….>的内容,当然最好是把<html….>中多余的xmlns:f和xmlns:h去掉。
