Primefaces v3.5
尝试使用RequestContext.getContext().scrollTo("")
在 ajax 请求结束时以编程方式滚动到我的表单。
XHTML 片段:
<h:form id="genericMessagesForm">
<p:messages id="genericMessages" />
</h:form>
<p:commandButton id="testButton"
value="Test" process="#{cc.attrs.itemName}Final, @this"
actionListener="#{myBean.methodCalledByAjax()}" />
Bean:
public void methodCalledByAjax() {
List<String> updateTargets = new ArrayList<String>();
updateTargets.add("currentRecordForm");
updateTargets.add("genericMessagesForm");
RequestContext.getCurrentInstance().update(updateTargets);
RequestContext.getCurrentInstance().scrollTo("genericMessagesForm");
}
Update does work.
滚动到does NOT工作(相同的 ID!)。
没有抛出服务器错误。
没有抛出 JavaScript 控制台错误。
浏览器尝试过:Firefox(最新)、Chrome(最新)、IE8。
您查看文档了吗?这是来自RequestContext#scrollTo() javadoc http://www.primefaces.org/docs/api/3.5/org/primefaces/context/RequestContext.html#scrollTo%28java.lang.String%29:
scrollTo
public abstract void scrollTo(String clientId)
ajax 请求完成后滚动到某个组件。
参数:
clientId
- 组件的客户端标识符。
看,它说的是客户端 ID,而不是组件 ID。这也是有道理的,滚动工作最终是由 JavaScript 通过document.getElementById()
和朋友。这仅适用于客户端 ID。
对于还没有全部记住的初学者NamingContainer http://docs.oracle.com/javaee/6/api/javax/faces/component/NamingContainer.html事情,找出正确的客户端 ID 的一个简单方法是通过右键单击查看 JSF 生成的 HTML 输出,查看源代码在网络浏览器中。
For a
<h:form id="genericMessagesForm">
<p:messages id="genericMessages" />
</h:form>
这就是类似的东西
<form id="genericMessagesForm" ...>
<div id="genericMessagesForm:genericMessages" ...>
...
</div>
</form>
因此,相应地修复调用:
requestContext.scrollTo("genericMessagesForm:genericMessages");
顺便说一句,如果表格仅包含<p:messages>
,那么您也可以完全删除整个表单。这<p:messages>
不是一个EditableValueHolder http://docs.oracle.com/javaee/6/api/javax/faces/component/EditableValueHolder.html nor ActionSource http://docs.oracle.com/javaee/6/api/javax/faces/component/ActionSource.html组件,因此不需要放置在UIForm http://docs.oracle.com/javaee/6/api/javax/faces/component/UIForm.html成分。这样你就可以继续使用你最初的尝试。
也可以看看:
- 如何找到ajax更新/渲染组件的客户端ID?找不到带有从“bar”引用的表达式“foo”的组件 https://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier/8644762#8644762
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)