【问题标题】:Bean not used in JSF pageJSF 页面中未使用的 Bean
【发布时间】:2013-01-03 03:28:07
【问题描述】:

我有一个名为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,而是我在页面中获得了代码。 我使用以下 URL 导航到该站点:http://localhost:8080/Kwetter/index.xhtml?user=Dude

【问题讨论】:

  • 你在初始化 bean 吗?看看这个链接:en.wikipedia.org/wiki/JavaBeans
  • 如果您刚开始接触 JSF,我建议您浏览一下我们的 JSF wiki 页面。将您放置在问题上的[jsf] 标记悬停,直到出现黑色弹出框,然后单击其中的info 链接。有一个 Hello World 和一些理智教程的链接。
  • 嗯..似曾相识? stackoverflow.com/questions/12787325/… 2 个月前您遇到过完全相同的问题。您显然使用的是/faces/* 映射而不是*.xhtml
  • 我知道我以前遇到过这个问题,哈哈。我搜索了我提出的问题,但找不到。这次的主要问题是我完全丢失了web.xml 文件。 NetBeans 不会自动生成它,所以我什至没有考虑将它映射到文件中。
  • 给你的答案提供了一些有用的链接和信息。 JSF 的 wiki 页面让我明白了一些事情。谢谢!

标签: java jsf javabeans facelets


【解决方案1】:

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

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

另一种方法是仅将FacesServlet 重新映射到*.xhtml 的URL 模式。
这样您就无需担心虚拟 URL。

另见:


与具体问题无关,您使用&lt;h:outputText&gt; 的方式不正确。只是摆脱他们。最好不要使用方法表达式语法,而只使用值表达式语法。

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

另见:

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 2012-09-03
    • 2011-12-08
    • 2016-02-17
    • 2012-09-09
    • 2013-09-25
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多