我希望在页面刷新时保持当前光标位置

时间:2013-10-17 11:02:41

标签: javascript jquery html jsf

我正在开发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文件中给出任何脚本。请指导我。

3 个答案:

答案 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文件夹:

  • 的Ajax4jsf-1.0.6.jar
  • 公地beanutils.jar
  • 公地消化器-1.7.jar
  • org.apache.servicemix.bundles.oscache-2.4_1.jar

在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"%>