1

我有一个名为 的页面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()}  

如您所见,它没有说nullor Dude,而是我在页面中获取代码。我使用此 URL 导航到该站点:http://localhost:8080/Kwetter/index.xhtml?user=Dude

4

1 回答 1

4

FacesServlet不调用时会发生这种情况。它负责执行所有 JSF 和 EL 工作。您需要确保您在浏览器地址栏中看到的请求 URL 与 中定义的 URL 模式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>

也可以看看:

于 2013-01-19T14:59:45.300 回答