1

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

4

3 回答 3

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 /> 您可以在此处了解更多信息。

于 2013-10-17T14:21:22.063 回答
0

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

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

但是,如果有一个你想要关注的文本字段,你总是可以使用 JSfocus();方法 onpageload。

编辑

至于OP的一般问题。

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

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

希望这可以帮助

- 席德

于 2013-10-17T11:09:17.173 回答
0

这个闪烁的问题可以通过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"%> 
于 2013-10-18T12:42:36.703 回答