无法显示Jsf标记outputText



我是JSF和EJB应用程序的新手,因此即使在简单的JavaEE应用程序中我也会遇到问题。我正在用JBoss在eclipse中创建一个简单的JavaEE应用程序,目的只是为了尝试JSF的一些标记并将它们绑定到Java bean。我不知道为什么以下JSf代码没有在输出页面上显示任何内容:

<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:ui="http://java.sun.com/jsf/facelets">
    <f:loadBundle basename="resources" var="msg" />
    <head>
    <title><ui:insert name="pageTitle">Page Title</ui:insert></title>
    <style type="text/css">
    </style>
    </head>
<body bgcolor="#ffffff">
<h:body>
<h:outputText value="#{hello.world}" />
<h:outputText value="TTT" />
</h:body>   
</body>
</html>  

不只是值hello。世界来自Bean,但是一个简单的文本"TTT"也没有出现。Bean的代码是:

@ManagedBean
public class Hello  {
final String world = "World";
/**
 * Default constructor. 
 */
public Hello() {
}
public String getWorld(){
    return "Hello" + world;
}
} 

facelets-config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
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-facesconfig_2_1.xsd">
 <managed-bean>
  <managed-bean-name>hello</managed-bean-name>
  <managed-bean-class>com.al.jsftest.Hello</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
</faces-config>

当我尝试使用纯文本标记时,它出现在屏幕上,但使用#{hello再次不起作用。,即绑定到Bean失败。一旦我有了如何让JSF标记成功输出的提示,我希望得到关于我应该注意什么,以便让Bean绑定到JSF的提示。

更新:这似乎是同样的问题,类似的问题,但我的应用程序是在Eclipse与JBoss,而不是在Netbeans与GlassFish。因此,我添加了我的web.xml文件,可能需要修改,但我仍然无法弄清楚它。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee /web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>JsfTest</display-name>
  <welcome-file-list>
   <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>
  <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>/faces/*</url-pattern>
 </servlet-mapping>

您必须告诉服务器您的页面应该由web.xml -文件中定义的JSF-Servlet加载。
如果我对您的示例理解正确,您应该有一个名为index.xhtml的欢迎文件,它应该通过调用您的网站用JSF呈现给用户。

问题来了:
所有的页面都不会被JSF呈现,除非您将它们通过您定义的JSF- servlet。

你的servlet定义应该是这样的:
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern> /* !important */
</servlet-mapping>
因此,您有两种(当然还有更多:))方法来告诉服务器用JSF-Servlet加载您的页面:
  1. 告诉您的欢迎文件加载JSF-Servlet

    <welcome-file-list>
      <welcome-file>faces/index.xhtml</welcome-file> /* note the /faces/ prefix */
    </welcome-file-list>
    
  2. <url-pattern>扩展到servlet-mapping

    <servlet-mapping>  
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
        <url-pattern>*.xhtml</url-pattern>  /*tell JSF to render all pages with xhtml-extension*/
    </servlet-mapping>
    

Netbeans+Glassfish和JBoss+eclipse之间应该没有任何区别,但您应该检查JSF库是否由服务器加载。

最后一点:
您正在通过faces-config.xml配置bean,这将完成这项工作,但自JSF 2以来。X你可以通过注释在你的类中做同样的事情,例如

@ManagedBean
@SessionScoped  
public class TestBean {
  // your stuff here
}

对我来说这更容易读懂。

希望这对你有帮助,玩得开心!

编辑:


在你的评论之后,我测试了你的设置:没有问题!
起初,我得到了一个错误,因为<f:loadBundle basename="resources" var="msg" />在我的设置中没有定义,但在删除这行之后,一切都很好。

然而,我在我的第一个列表项目中犯了一个小错别字,所以请再次检查。
您的html-skeleton看起来很好,在我的测试中也可以正常工作,所以也不应该有任何错误。

请检查以下内容:

  1. jsf库是由服务器还是应用程序加载的吗
  2. 在您的web.xml -file中是否有更多的servlet定义?
  3. 详细的错误信息是什么

干杯!

我创建了一个新的动态Web项目,这次我添加了index.xhtml文件,使用"Blank Facelet Page"作为模板而不是"Common Facelet Page"。我将web.xml文件中的url模式更改为*.xhtml,它最终通过浏览器上的完整路径名(index.xhtml)或不工作。在"Common Facelet Page"上遵循相同的过程,我没有设法做到这一点。奇怪。

我还注意到,在选择"Common Facelet Page"并单击下一步之后,出现了一个库列表,用户可以选择检查其中的一些。我什么都没检查,也许我应该检查一下。

相关内容

  • 没有找到相关文章

最新更新