Tha*_*ham 10 java jsf servlets jsf-2
这是我的commandLink
工作方式
<p:dataTable value="#{myBean.users}" var="item">
<p:column>
<h:commandLink value="#{item.name}" action="#{myBean.setSelectedUser(item)}" />
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
然后在 myBean.java
public String setSelectedUser(User user){
this.selectedUser = user;
return "Profile";
}
Run Code Online (Sandbox Code Playgroud)
假设用户名是Peter
.然后,如果我点击Peter
,我将设置selectedUser
为彼得的用户对象,然后重定向到配置文件页面,该页面现在呈现信息selectedUser
.我想仅使用创建相同的效果<h:outputText>
,因此我想到了GET请求.所以我这样做
<h:outputText value="{myBean.text(item.name,item.id)}" />
Run Code Online (Sandbox Code Playgroud)
那么text(String name, Long id)
方法就回来了
"<a href=\"someURL?userId=\"" + id + ">" + name + "</a>"
Run Code Online (Sandbox Code Playgroud)
剩下的就是创建一个servlet,捕获它id
,查询数据库以获取user
对象,设置为selectedUser
重定向.所以这是我的servlet
public class myServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Long userId = Long.parseLong(request.getParameter("userId"));
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有了id
,如何访问我的会话bean来查询数据库user
,然后访问托管bean来设置user
to selectedUser
,然后重定向到profile.jsf
?
Bal*_*usC 19
JSF使用托管bean名称作为密钥将会话作用域托管bean存储为会话属性.所以以下内容应该有效(假设JSF在会话之前已经创建了bean):
MyBean myBean = (MyBean) request.getSession().getAttribute("myBean");
Run Code Online (Sandbox Code Playgroud)
也就是说,我觉得你正在寻找解决方案的错误方向.你也可以这样做:
<a href="profile.jsf?userId=123">
Run Code Online (Sandbox Code Playgroud)
与请求作用域中的以下内容相关联 profile.jsf
@ManagedProperty(value="#{param.userId}")
private Long userId;
@ManagedProperty(value="#{sessionBean}")
private SessionBean sessionBean;
@PostConstruct
public void init() {
sessionBean.setUser(em.find(User.class, userId));
// ...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45153 次 |
最近记录: |