我正在开发JSF1.2应用程序。当用户在输入组件中进行更改时,例如h:selectOneMenu,将调用JSF“值更改事件”。当它调用页面时,提交表单并重新加载页面,光标位于页面顶部。我希望光标停留在之前的位置。下面是h的代码:selectOneMenu。
<h:selectOneMenu value="#{bean.value}" onchange="this.form.submit()"
valueChangeListener="#{bean.valueChangeMethod}">
<f:selectItems value="#{bean.values}" />
</h:selectOneMenu>
我该如何解决?我没有在XHTML文件中给出任何脚本。请指导我。
答案 0 :(得分:1)
由于您未指定JSF版本,因此这是一个 JSF2 解决方案:
如果您将其设为AJAX,则页面滚动将保持不变。这是一个例子:
<h:selectOneMenu value="#{bean.value}">
<f:selectItems value="#{bean.values}" />
<f:ajax listener="#{...}" render="id1 id2 id3 ..." />
</h:selectOneMenu>
id1 id2 id3 ...
是您在AJAX调用后要重新呈现的组件ID。您可以@all
刷新整个页面,或@form
刷新当前表单。
您可以详细了解<f:ajax />
here。
答案 1 :(得分:0)
如果你想要的是在页面刷新时获得鼠标位置,这是不可能。
现在无论如何。然而,您可以捕获onmousemove
事件,该事件将告诉您光标在屏幕上的位置并保存该位置,但您无法操纵鼠标自行移动。
但是,如果有一个你想要聚焦的文本字段,你总是可以在onpageload上使用JS focus();
方法。
修改强>
至于OP的一般性问题。
这是不可能的,它是浏览器的依赖。通常,您的光标会保持在任何普通现代浏览器中的位置。对于较旧的浏览器或IE ,行为将会有所不同。
无法实现此目的的原因是因为页面刷新时鼠标位置未知,因此即使可能,也无法重新定位。
希望这有帮助
- Sid
答案 2 :(得分:0)
这个闪烁的问题可以通过ajax解决。对于Ajax,将以下jar添加到lib文件夹:
在web.xml文件中添加以下代码
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<url-pattern>*.jsf</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
并在.jsp页面中添加以下行:
<%@ taglib prefix="a4j" uri="https://ajax4jsf.dev.java.net/ajax"%>