我为我的JSF应用程序创建了一个登录页面。我想通过URL将用户名和密码作为参数传递,以便稍后将它们作为bean类中的字段接收。我怎么能这样做?
答案 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类中应该存在具有类似签名的方法,该值将直接映射到函数参数。