如何使用JSF将参数通过URL传递给bean类?

时间:2013-04-08 03:23:06

标签: java jsf

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

2 个答案:

答案 0 :(得分:7)

你应该把它作为POST参数传递,这是JSF默认做的, 您可以谷歌搜索一个带有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,因为JSF 1.2中没有viewParam

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

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

答案 1 :(得分:1)

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

关于你问题的答案:

<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类中应该存在具有类似签名的方法,该值将直接映射到函数参数。