我想基本上做杰森要求的here
在一句话中,我希望url栏代表AJAX应用程序的状态,这样我就可以允许它为它添加书签,并允许用户通过使用后面的/后退按钮返回到先前的状态。浏览器。
我的差异(来自杰森的问题)是我使用的是JSF 2.0。 我已经读过JSF 2.0添加了使用get的功能,但我不确定使用它的正确方法。
感谢您的帮助。
进一步澄清
如果我理解正确,为了能够在AJAX webapp中为特定状态添加书签,我将不得不使用location.hash。我对么?我试图在某种意义上实现类似gmail的行为,虽然应用程序是完整的AJAXified并且没有重定向发生,但我仍然可以使用后退/前进和书签(这就是为什么我希望从更新的URL栏更新AJAX应用程序本身,而不是通过重定向)
更新
刚刚找到this类似的问题
答案 0 :(得分:3)
我的区别(来自杰森所说的)是我使用的是JSF 2.0。我已经读过JSF 2.0添加了使用get的功能,但我不确定使用它的正确方法。
请注意,这与维护Ajax状态不同。它通常由片段标识符(URL中以#
开头的部分,也称为hashbang)发生。 JSF不为此提供内置组件/功能。到目前为止,我还没有看到一个组件库。但是,您可能会发现this answer对于在JSF中开始使用自行开发的哈希片段处理器很有用。
关于使用GET请求,只需使用<h:link>
,<h:outputLink>
甚至<a>
即可创建GET链接。您可以h:
在<f:param>
组件中提供请求参数。 E.g。
<h:link value="Edit product" outcome="product/edit">
<f:param name="id" value="#{product.id}" />
</h:link>
在product/edit.xhtml
页面中,您可以定义要设置的参数和要在GET请求上执行的操作
<f:metadata>
<f:viewParam name="id" value="#{productEditor.id}" />
<f:event type="preRenderView" listener="#{productEditor.init}" />
</f:metadata>
在与product/edit.xhtml
页面关联的请求或视图作用域中 - 在此示例#{productEditor}
- 中,您只需定义属性和侦听器方法。在模型中收集,转换,验证和更新所有属性后,将执行侦听器方法。
private Long id;
private Product product;
public void init() {
product = productService.find(id);
}
答案 1 :(得分:0)
通常你会使用AJAX来阻止完整的页面刷新。如果您更改基本uri,AFAIK所有当前浏览器都会发出页面刷新。因此,您必须按照您提供的问题中的建议使用散列部分。
我们遇到了类似的问题并做了类似的事情: