如何在支持 bean 中处理漂亮的“查询参数”?

Posted

技术标签:

【中文标题】如何在支持 bean 中处理漂亮的“查询参数”?【英文标题】:How to process prettyfaces 'query-param' in backing bean? 【发布时间】:2012-02-23 00:27:18 【问题描述】:

我有一个用户列表(带有指向/user/view/userIduserId 链接的数据表)。单击此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 映射配置中的 &lt;action&gt; 元素指定。首先,您需要在 bean 中添加一个方法,如下所示:

@Named("bean")
@RequestScoped
public class LoginBean 

public String loadLoggedUser() 
    if ( userId != null ) 
        this.user = user.findById(userId);
        return null;
    
    return "failure";


其次,您需要将&lt;action&gt; 添加到您的 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/

【讨论】:

但是我有很多用户。所以我需要像&lt;pattern&gt; /user/view/#bean.userId &lt;/pattern&gt; 这样的东西。我在问如何在支持 bean 中处理这个#bean.userId 澄清一下,我认为您的意思是“我想在访问页面时使用#bean.userId 的值加载数据。”

以上是关于如何在支持 bean 中处理漂亮的“查询参数”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 的支持 bean 中获取 Unicode 数据

共享处理程序和支持 bean

如何处理 ASP.NET SqlDataSource 中的空 CONTAINS() 查询参数?

Android:如何使用UriMatcher切换多表、查询参数和活动?

如何用Python输出漂亮的xml文件

JSF 如何从支持 bean 重定向到支持 bean 中动态构建的 URL?