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



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

你应该把它作为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。在JSF 1.2中没有viewParam

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

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

首先,如果您正在考虑将用户名和密码附加为查询字符串的一部分。那就不要这样做,这会使你的系统变得脆弱。

关于你问题的答案:

<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类中,该值将直接映射到函数参数。

相关内容

  • 没有找到相关文章

最新更新