5

我为我的 JSF 应用程序创建了一个登录页面。我想通过 URL 将用户名和密码作为参数传递,以便稍后将它们作为 bean 类中的字段接收。我怎样才能做到这一点?

4

2 回答 2

8

您应该将其作为 POST 参数传递,这是 JSF 默认执行的操作,您可以在 Google 上搜索使用 JSF 的登录页面的快速示例,但是如果您想从 URL 读取请求参数,那么您可以这样做

        <a href="name.jsf?id=#{testBean.id}" />

你的 bean 中需要这样的东西

@ManagedBean
@RequestScoped
public class TestBean {

  @ManagedProperty(value = "#{param.id}")
  private String id;

  .....
}

您也可以在您的 xhtml 中执行此操作以获得相同的结果,这将适用于 JSF 2.x,因为 viewParam 在 JSF 1.2 中不可用

<f:metadata>
    <f:viewParam name="id" value="#{testBean.id}" />
</f:metadata>

上面的行将在创建 bean 时根据请求参数 id 设置 bean 中的参数 id。

于 2013-04-08T05:21:39.960 回答
2

首先,如果您正在考虑将用户名和密码作为查询字符串的一部分附加。然后不要这样做,您正在使您的系统易受攻击。

关于你的问题的答案:

<h:commandLink action="#{ttt.goToViewPage()}" value="View">
    <!-- To access via f:param tag, this does not maps directly to bean. Hence using context fetch the request parameter from request map. -->
    <!-- <f:param name="selectedProfileToView" value="#{profile.id}" /> -->

    <!-- Using this to replace the f:param tag to avoid getting the request object -->
    <f:setPropertyActionListener target="#{ttt.selectedStudentProfile}" value="#{profile.id}" />

</h:commandLink>

f:param(如评论中所述),这不会直接映射到 bean 属性,但您必须使用上下文来获取请求对象,您可以从中引用 requestparametermap 中的值。

FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap();

f:setPropertyActionListener,这是另一个属性,它将直接映射到托管 bean 的属性。

<h:commandLink action="#{ttt.goToEditPage(profile.id)}" value="Edit">

如果你看这里,我已经提到了函数中的参数。托管 bean 类中应存在具有相似签名的方法,该值将直接映射到函数参数。

于 2013-04-08T04:15:53.563 回答