如何在支持 bean 中处理漂亮的“查询参数”?
Posted
技术标签:
【中文标题】如何在支持 bean 中处理漂亮的“查询参数”?【英文标题】:How to process prettyfaces 'query-param' in backing bean? 【发布时间】:2012-02-23 00:27:18 【问题描述】:我有一个用户列表(带有指向/user/view/userId
的userId
链接的数据表)。单击此userId
链接后,浏览器将按预期重定向到“查看”页面。
我有一个页面接受 url 模式 http://localhost:8080/user/view/1
用于第一个用户,http://localhost:8080/user/view/2
用于第二个等,但我不知道在此页面加载后如何使用 userId
值。
如何使用PrettyFaces URLRewriteFilter 实现这一目标?一旦在访问页面时 PrettyFaces 注入了支持 bean 的值,如何使用 #bean.userId
(1,2 等)的值加载数据。谁能解释一下?
<url-mapping id="view">
<pattern value="/user/view/#bean.userId/" />
<view-id value="/userview.jsf" />
</url-mapping>
我正在使用 JSF2+Primefaces.3.0.M3+Prettyfaces-jsf2.3.3.2 和 GAE。
【问题讨论】:
【参考方案1】:您需要一个页面加载操作,由您的 URL 映射配置中的 <action>
元素指定。首先,您需要在 bean 中添加一个方法,如下所示:
@Named("bean")
@RequestScoped
public class LoginBean
public String loadLoggedUser()
if ( userId != null )
this.user = user.findById(userId);
return null;
return "failure";
其次,您需要将<action>
添加到您的 URL 映射中:
<url-mapping id="view">
<pattern value="/user/view/#bean.userId/" />
<view-id value="/userview.jsf" />
<action>#bean.loadLoggedUser</action>
</url-mapping>
这里我们定义了一个页面动作,当请求与我们的模式匹配的 URL 时,将在 bean #bean.loadLoggedUser
上执行。例如:/user/view/2
。
【讨论】:
【参考方案2】:<url-mapping id="login">
<pattern> /user/view/1 </pattern>
<view-id> /legacy/user/login.jsp </view-id> <!-- Non JSF View Id -->
</url-mapping>
<url-mapping id="register">
<pattern>/user/view/1 </pattern>
<view-id>/faces/user/register.jsf</view-id> <!-- JSF View Id -->
</url-mapping>
<url-mapping id="login1">
<pattern> /user/view/2 </pattern>
<view-id> /legacy/user/login2.jsp </view-id> <!-- Non JSF View Id -->
</url-mapping>
<url-mapping id="register2">
<pattern>/user/view/2 </pattern>
<view-id>/faces/user/register2.jsf</view-id> <!-- JSF View Id -->
</url-mapping>
参考http://ocpsoft.com/prettyfaces/
【讨论】:
但是我有很多用户。所以我需要像<pattern> /user/view/#bean.userId </pattern>
这样的东西。我在问如何在支持 bean 中处理这个#bean.userId
?
澄清一下,我认为您的意思是“我想在访问页面时使用#bean.userId
的值加载数据。”以上是关于如何在支持 bean 中处理漂亮的“查询参数”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 的支持 bean 中获取 Unicode 数据
如何处理 ASP.NET SqlDataSource 中的空 CONTAINS() 查询参数?