2013-07-26 53 views
0

这里访问managedbean的方法是我的项目结构: eclipse project structure不能从一个XHTML页面

这是我的HelloWorld.java

package com.tutorialspoint.test; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
@ManagedBean(name = "helloWorld") 
@RequestScoped 
public class HelloWorld 
    { 
     public HelloWorld() 
     { 
      System.out.println("HelloWorld started!"); 
     } 
     public String getMessage() 
     { 
      return "JSF2!"; 
     } 
    } 

,这是我的index.xhtml

  <?xml version="1.0" encoding="ISO-8859-1" ?> 
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
      <html lang="en" 
       xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:h="http://java.sun.com/jsf/html"> 
      <h:head> 
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
      <title>Insert title here</title> 
      </h:head> 
      <h:body> 
      HEllo form <h:outputLabel value="#{helloWorld.getMessage()}" /> 
      </h:body> 

      </h:body> 
      </html> 

输入localhost后得到的输出:8080/demojsf /是HEllo形式而不是 来自jsf2的HEllo。 这里有什么问题?

+1

相关:http://stackoverflow.com/questions/17544141/purpose-of-the-attribute-of-houtputlabel/ – BalusC

回答

2

下面是一个使用h:outputLabel使用的h:outputLabel

public class HelloWorld 
    { 
     public String message= "JSF2!"; 
     public HelloWorld() 
     { 
      System.out.println("HelloWorld started!"); 
     } 
     public String getMessage() 
     { 
      return message; 
     } 
    } 

<h:outputLabel for="msgID" value="HEllo form " /> 
<h:outputText id="msgID" value="#{helloWorld.message}"/> 
+0

我使用了,但它仍然不起作用。在 user1788048

+0

'for'中是什么=“msgID”是“此元素是标签的组件的客户端标识符”。如果不起作用,您可以尝试使用'for'吗?我刚刚给出了'msgID'的名字。你可以给出任何其他的名字.. –

+0

你在'for'中给出的ID应该与你在'h:outputText'中给出的ID匹配。 –

1

为H for属性的方式:outputLabel将调用的属性的getter方法。因此,更改代码如下,

<h:outputLabel value="#{helloWorld.message}" /> 

请在下面找到了我一个工作代码示例,

<!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:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich"> 
<head> 
<title>JSF Hello World</title> 
</head> 
<body> 
    <f:view> 
     <h:form> 
      <h2> 
       <h:outputLabel value="#{jsfHelloWorldBean.message}" /> 
      </h2>   
     </h:form> 
    </f:view> 
</body> 
</html> 

我的豆

package devmanuals; 

    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.RequestScoped; 

    @ManagedBean(name="jsfHelloWorldBean") 
    @RequestScoped 
    public class JsfHelloWorldBean { 
     //String message; 
     public String getMessage(){ 
      return "JSF!2"; 
     } 
    } 
+0

仍然输出页面只显示来自jsf2的hello而不是hello。 – user1788048

+0

这是我注意到的奇怪的事情。当我点击项目,然后在服务器上运行它的URL是:localhost:8080/demojsf /和输出是从你好。但是,当我只运行index.xhtml然后url是:localhost:8080/demojsf/faces/index.xhtml和我得到正确的输出 – user1788048

+1

如果你看看web.xml你会找出问题。原因是你的面孔servlet只会根据你的web.xml被调用。在你的第一个URL中,Faces servlet没有被调用,因此JSF生命周期管理不会发生。将index.jsp作为欢迎页面并重定向到所需的页面将解决您的问题 – spukar

1

你的代码工作正常,在我的身边。我使用的JSF2.1,JDK7和Netbeans 7.3,除了双重</h:body>

+0

是代码现在可以工作..但仅当我输入localhost:8080/demojsf/faces/index.xhtml时,它不显示正确当我使用url localhost:8080/demojsf /输出时,即使我已经在web.xml中添加了 index.xhtml user1788048

+1

,它对我来说一切正常。你的是否有这个/faces/*?如果有的话,试试这个, faces/index。xhtml van

+0

是的,我和你所说的一样......现在一切正常。谢谢。 – user1788048