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