1

我有一个场景,我有一个能够显示数据表的页面。数据表数据由用户选择,但必须能够提供直接 URL 以将特定数据加载到表中。为了实现这一点,我在 URI 中使用参数来确定应该加载的服务 (www.example.com?service=1)。

用户单击一项服务,URL 更改为 www.example.com?service=2,该服务的数据通过 AJAX 加载并显示在页面上。没有回发,只有部分页面刷新。我想避免完整的页面重新加载,因为只有数据表需要重新加载。

  1. 我将如何在不重新加载页面的情况下从支持 bean 更新 URL 参数(即从 www.example.com?service=1 到 www.example.com?service=2)?
  2. 我将如何在不重新提交页面的情况下阅读新的 URL 参数?

更新

目前我正在重定向整个页面

FacesContext.getCurrentInstance().getExternalContext().redirect(url); 

并尝试使用

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().‌​get("service"); 

然而,这真的不是我想要实现的,因为它重新加载了许多不必要的数据,它使管理页面上的其他属性更加复杂!我想更新参数并阅读它们,但只重新加载数据表。

4

1 回答 1

0

我是 JSf 的新手,但我认为这会有所帮助,这是一个简单的例子:

假设您有一个<h:inputText>带有对象属性的值,例如:

<h:form id="formUser">
    <h:inputText value="#{userBean.name}" id="userName" />
</h:form>

如果您需要使用 ajax 调用更新 name 属性:

<h:commandButton value="Update user" action="#{userBean.updateUserName}">
    <f:ajax render="formUser:userName" execute="formUser:userName" />
</h:commandButton>

render 属性将使元素在页面上重新加载。执行将使元素设置值,在这种情况下,设置为name属性UserBean

这样,当您在其上键入名称inputText并单击 时commandButton,它将执行名称的 set 方法并在视图上重新渲染输入,以便出现新值。

但是,如果您需要link这里是这里的示例

<h:link value="Login page + Param " outcome="login" >
    <f:param name="username" value="mkyong" />
</h:link>

那是你真正想要的吗?

于 2012-06-14T12:40:26.013 回答