【问题标题】:i want to stay on current cursor location when page refreshes我想在页面刷新时停留在当前光标位置
【发布时间】:2013-10-25 20:04:04
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery html jsf


    【解决方案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 刷新当前表单。

    您可以了解更多关于&lt;f:ajax /&gt;here的信息。

    【讨论】:

    • 感谢您的回复。抱歉,我没有提到我的 jsf 版本。我正在开发 jsf 1.2。
    【解决方案2】:

    如果您要在页面刷新时获得鼠标位置,这是不可能做到的。

    反正现在。但是,您可以捕获 onmousemove 事件,该事件将告诉您光标在屏幕上的位置并保存该位置,但您不能操纵鼠标自行移动。

    但是,如果您想要关注某个文本字段,您始终可以使用 JS focus(); 方法 onpageload。

    编辑

    至于 OP 的一般性问题。

    这是不可能的,它取决于浏览器。通常,您的光标会停留在任何普通现代浏览器中的位置。对于较旧的浏览器或 IE,行为会有所不同。

    这不可能的原因是因为页面刷新时鼠标位置是未知的,因此即使可以重新定位也无法重新定位。

    希望对你有帮助

    &dash;席德

    【讨论】:

    • 感谢您的回复。实际上,在我的 XHTML 页面中,我有一个自定义列表页面,用户可以在其中添加一些特性,因此它分布在多个页面上。当我向下滚动到第二页时,如果我选择了 h:selectOneMenu 选项,则页面刷新并且光标转到页面顶部。我希望在页面刷新时光标必须停留在上一个位置。
    【解决方案3】:

    这个闪烁问题可以通过ajax来解决。对于 Ajax,将以下 jars 添加到 lib 文件夹:

    • ajax4jsf-1.0.6.jar
    • commons-beanutils.jar
    • commons-digester-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"%> 
    

    【讨论】:

    • 感谢您的回复。实际上我使用的是 xhtml 文件而不是 jsp。所以请告诉我如何将这个 taglib 添加到 xhtml。
    • 对不起,我忽略了你的 xhtml 部分。对于 xhtml 页面,您可以使用 w3.org/1999/xhtml" xmlns:h="java.sun.com/jsf/html" xmlns:f="java.sun.com/jsf/core" xmlns:a4j="ajax4jsf.dev.java.net/ajax">。只需添加这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多