我在Eclipse 4.3上使用PrimeFaces 3.5开发了一个JSF Web应用程序。没有编译时或运行时错误,应用程序已成功部署。但是,我无法在浏览器中获得所需的输出。 PrimeFaces组件没有显示,而标准的JSF组件则显示。
我不确定我是否正确配置了一切。 PrimeFaces JAR至少在/WEB-INF/lib
内:
PrimeFaces XML名称空间声明为xmlns:p="http:\\primefaces.org\ui"
我在FacesServlet
上映射了*.xhtml
:
以下是login.xhtml
的完整源代码:
<!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"
xmlns:p=" http://primefaces.org/ui" >
<h:body>
<h:head ><title>Login Page !!</title></h:head>
<h:form>
<p:panel id="panel" header="Login Panel" style="margin-bottom:10px;">
<h:panelGrid columns="3">
<h:outputLabel value="User Id:" />
<p:inputText id="id" value="loginBean.id" required="true" requiredMessage="ID required"/>
<p:message for="id" />
<p:outputLabel value="User Name:" />
<p:inputText id="name" value="loginBean.name" required="true" requiredMessage="Name required" />
<p:message for="name" />
</h:panelGrid>
</p:panel>
<p:commandButton type="Submit" value="Submit" action="#" style="margin-right:20px;" />
`
输出如下:
如你所见,<h:outputText>
完成了它的工作,但<p:xxx>
都没有出现。这是怎么造成的,我该如何解决?
答案 0 :(得分:7)
这不是这个问题的直接答案,但它与之相关。我想分享我对问题的体验&#34; PrimeFaces标签没有渲染&#34;。我在WildFly上开发JSF 2.2应用程序,这是我的index.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:body>
<h:form>
<p:editor value="#{mDb.newMessage.content}"></p:editor>
</h:form>
</h:body>
</html>
当应用程序运行时,编辑器不会显示,这对我来说非常奇怪,因为PrimeFaces在项目中配置正确。
我意外地发现了问题原因。 index.xhtml中没有h:head
标记。当我放置head标签时,PrimeFaces组件成功呈现!!
我希望这可以帮助别人。
答案 1 :(得分:5)
关于PrimeFaces组件未呈现的具体问题的原因,根据屏幕截图,PrimeFaces taglib URI中有一个前导空格:
xmlns:p=" http://primefaces.org/ui"
这很重要,因而错了。摆脱它:
xmlns:p="http://primefaces.org/ui"
这样,必须解析PrimeFaces组件并将其显示在HTML输出中。
对于其余部分,我强烈建议您先学习一个理智的JSF2教程。您正在制作一些概念性错误,这些错误已经被一个体面的Hello World示例所涵盖。从our JSF wiki page开始。然而,这些错误确实不有这个“空白页”。它们会导致不同的问题(例如CSS / JS无法运行,表单提交不起作用)。如果你仍然坚持这一点,你应该问一个新问题。
答案 2 :(得分:0)
<强> 1 强>
当您从JSF组件引用Managed Bean属性时,请使用JSF EL语句的正确语法。
#{bean_name.property}
在您的代码中,您忘记提供#{}
例如, login.xhtml 中的#15 行使用:
<h:inputText id="id" value="#{loginBean.id}" required="true" requiredMessage="ID required"/>
<强> 2 强>
您将<h:head>
保留在<h:body>
内。这不是一个好习惯
将<h:head>
放在一边<h:body>
实际结构如下:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title></title>
<h:head>
<h:body>
<!-- Your Code -->
</h:body>
</html>
第3 强>
您可能在ManagedBean LoginBean.java 类中遇到异常
请发布代码而不是屏幕截图。
答案 3 :(得分:-3)
如果您构建proeject mit maven,请记住将primefaces lib的依赖项包含到pom.xml中
最好的问候