Bean未在JSF页面中使用

时间:2013-01-19 14:53:43

标签: java jsf javabeans facelets

我有一个名为index.xhtml的页面,其中我使用bean类中的变量来填充页面中的信息。但是当我启动文件时,看起来它没有使用bean。

我的index.xhtml

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <script language="JavaScript" type="text/javascript" src="resources/tab-panel.js"></script>
        <link rel="stylesheet" href="resources/style.css" type="text/css" />
        <title>Tweetpage of #{userBean.name}</title>
    </h:head>

    <f:metadata>
        <f:viewParam name="user" value="#{userBean.name}" />
        <f:event type="preRenderView" listener="#{userBean.init()}" />
    </f:metadata>

    <h:body onload="bodyOnLoad()" onResize="raisePanel(currentMenuIndex)">
        <div class="loginbox">
            <h:link value="Login" outcome="user.xhtml" />
        </div>
        <div class="namebox">
            <h:outputLabel>User: #{userBean.name} </h:outputLabel>
        </div>
        <div class="detailsbox"> 
            <h:outputText>Name: #{userBean.getName()} </h:outputText>
            <h:outputText>Web: #{userBean.getWeb()} </h:outputText>
            <h:outputText>Bio: #{userBean.getBio()} </h:outputText>
        </div>

我的UserBean.java

@ManagedBean
@SessionScoped
public class UserBean implements Serializable {

    @Inject @Named(value = "userService")
    private UserService service;

    private String name;

    private User user;

    public UserBean() {

    }

我的网页如下:

User: #{userBean.name} 
Name: #{userBean.getName()}  

正如您所看到的,它并没有说nullDude,而是在页面中获取代码。 我使用以下网址导航到该网站:http://localhost:8080/Kwetter/index.xhtml?user=Dude

1 个答案:

答案 0 :(得分:4)

未调用FacesServlet时会发生这种情况。它是负责执行所有JSF和EL工作的人。您需要确保浏览器地址栏中显示的请求网址与FacesServlet中定义的web.xml的网址格式相匹配。如果您通过右键单击浏览器中的查看源来查看HTML源代码,那么您应该注意到所有JSF标记仍未解析,而不是生成HTML表示。

因此,如果您已将其映射到*.jsf,那么您应该通过http://localhost:8080/Kwetter/index.jsf?user=Dude打开它。

另一种方法是在FacesServlet的网址格式上重新映射*.xhtml 这样您就不必担心虚拟URL。

另见:


对具体问题

无关,您使用<h:outputText>的方式不对。摆脱它们。您最好也不要使用方法表达式语法,而只使用值表达式语法。

<div class="namebox">
    <h:outputLabel value="User: #{userBean.name}" />
</div>
<div class="detailsbox"> 
    Name: #{userBean.name}
    Web: #{userBean.web}
    Bio: #{userBean.bio}
</div>

另见: