【问题标题】:JSF to Bean to JSFJSF 到 Bean 到 JSF
【发布时间】:2012-12-10 20:09:39
【问题描述】:

所以我在尝试传递字符串值时遇到问题。

字符串值是通过登录页面作为用户名输入的。

然后 JSF 调用 Bean 来验证登录信息,然后进入另一个 JSF 页面。

我想知道如何将用户名传递到新的 JSF 页面。谢谢。

【问题讨论】:

  • 你已经尝试过什么?您遇到什么错误?如果您展示您已经采取的步骤,更多的人将能够帮助您。请查看如何询问good question

标签: jsf javabeans


【解决方案1】:

如果您执行的是导航而不是重定向,那么您基本上不需要执行任何操作。该信息也仅在导航页面中可用。

例如在登录页面,

<h:inputText value="#{bean.username}" />

在导航页面中:

<p>You have entered the following username: #{bean.username}</p>

但是,如果您执行的是重定向而不是导航,那么您基本上需要将信息存储在更广泛的范围内。您没有明确阐述问题中的具体功能要求,但如果我猜对了,您只是想记住当前登录的用户以完成剩余的 HTTP 会话。在这种情况下,只需在登录操作期间将其存储在 session scope 中即可。

public String login() {
    // ...
    User user = userService.find(username, password);
    // ...
    externalContext.getSessionMap().put("user", user);
    // ...
    return "nextpage?faces-redirect=true";
}

这样,#{user} 在整个 HTTP 会话中都可以使用它。

<p>You're logged in as #{user.name}.</p>

【讨论】:

  • 太棒了!这显示了如何为一个明显糟糕的问题提供丰富的答案。
  • 感谢您的回复。我最终在与多个页面相关的 bean 中放入了很多会话范围。因为它看起来很厚实,我很确定有一种更简单的方法可以做到这一点。但这是一个开始,非常感谢。
  • 如果这些页面不能独立存在,那么您应该使用带有条件渲染内容的单个页面以及视图范围的 bean。
【解决方案2】:

您也可以在不使用会话范围的情况下使用&lt;t:saveState&gt;&lt;t:saveState&gt; 比请求范围长,但比会话范围短。

这可能对你有帮助:http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_saveState.html

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多