好的,所以我正在尝试设置一个简单的JSF应用程序。我正在使用NetBeans 6.8,Glassfishv3和Maven2。我制作了一个JSP文档:
<?xml version="1.0" encoding="utf-8"?>
<html xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view>
<head>
<title><h:outputText value="#{Welcome.title}"/></title>
</head>
<body>
<h:outputText value="Welcome"/>
</body>
</f:view>
</html>
问题是,如果我导航到此页面(http://myHost/myApp/faces/welcome.jspx
),它将作为XML文档返回,但填充了${Welcome.title}
值:
<?xml version="1.0" encoding="UTF-8"?>
<html><head><title>Gymix - Welcome</title></head><body>Welcome</body></html>
在Internet Explorer中,这看起来像是我打开了一个XML文档。在谷歌浏览器中,标题打印在欢迎文本旁边,而不是标题,页面的URL将打印在选项卡上。
如果我将JSP文档更改为普通的JSP页面(taglibs而不是xmlns等),它可以工作,我会返回一个正确的页面。关于什么是错的任何想法?谢谢!
编辑:遗憾的是没有一个快速解决方法修复此问题,所以我会更多地研究这个问题。顺便说一下,我的pom.xml有jsf-api和jsf-impl依赖项,两者的版本都设置为1.2_14
答案 0 :(得分:2)
我认为您需要输入有效的doctype。
这将低于你的xml声明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
答案 1 :(得分:2)
除了您需要设置正确的doctype和content type以便浏览器知道如何处理页面这一事实之外,您还应该摆脱旧式{{1}格式化并使用jspx
格式来获得Java EE 6发布的JSF 2.0和Facelets的最大好处。
应将给定代码更改为:
xhtml
请注意,包含doctype,并且JSF 2.0 / Facelets会在<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>#{welcome.title}</title>
</h:head>
<h:body>
Welcome
</h:body>
</html>
组件的帮助下自动关注正确的内容类型。另请注意,缺少<h:head>
标记,Facelets中不再需要它。
您可能还需要重新配置您的webapp以充分利用JSF 2.0和Facelets的全部功能。要了解有关JSF 2.0和Facelets的更多信息,我强烈建议您浏览Java EE 6 tutorial part II chapters 4-9。
祝你好运。 根据{{3}}更新:我会添加一个重要说明;确实,XML声明(第一行)会混淆某些webbrowsers的呈现模式(也可以看到上面doctype链接背后的网站),但这肯定是不这里的问题。 Facelets 在生成页面的HTML期间删除 XML声明。 XML声明就在那里,因为Facelets需要首先使用基于XML的工具来解析页面。我们讨论的是基于组件的MVC框架和基于XML的模板技术,而不是简单的普通HTML页面;)
答案 2 :(得分:0)
您必须告诉浏览器您要发送的内容。我不太确定如何在JSP中做到这一点,所以你必须弄清楚自己或等到比我更有知识的人告诉你。
您必须发送Content-Type HTTP标头,表明您的文件是text/html; charset=UTF-8
。
Content-Type: text/html, charset=UTF-8