2013-10-17 53 views
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文件中給出任何腳本。請在此引導我。

回答

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調用後重新呈現的組件的標識。您可以將@all刷新整個頁面或@form來刷新當前表單。

您可以瞭解更多關於<f:ajax />here

+0

感謝您的回覆。對不起,我沒有提到我的jsf版本。我正在研究jsf 1.2。 –

0

如果你所尋找的是在頁面刷新上獲得鼠標位置,這是不可能要做。不管怎麼說,您可以捕獲onmousemove事件,該事件會告訴您光標在屏幕上的位置並保存該位置,但不能操縱鼠標自行移動。

但是,如果有一個文本字段,你想聚焦,你總是可以使用JS focus();方法onpageload。

編輯

對於OP的一般性問題。

這是不可能的,它是瀏覽器依賴。通常你的光標停留在任何普通的現代瀏覽器中。使用舊版瀏覽器或IE時,行爲會有所不同。

造成這種情況不可能的原因是因爲在頁面刷新時鼠標的位置將是未知的,因此即使可能,您也無法重新定位它。

希望這有助於

‐希德

+0

感謝您的答覆。實際上,在我的XHTML頁面中,我有一個自定義列表頁面,用戶可以在其中添加少量特性,因此它可以傳播多個頁面。當我向下滾動到第二頁時,如果我選擇了h:selectOneMenu選項,則刷新頁面並將光標移動到頁面的頂部。我希望光標在刷新頁面時必須保持原來的位置。 –

0

這個閃爍的問題可以通過ajax來解決。對於Ajax添加下面的罐子到lib文件夾:

  • 的Ajax4jsf-1.0.6.jar
  • 公地beanutils.jar
  • 公共沼氣池-1.7.jar
  • org.apache.servicemix。 bundles.oscache-2.4_1。罐子

添加以下代碼在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"%> 
+0

感謝您的回覆。其實我使用的是xhtml文件而不是jsp。所以請告訴我如何將這個taglib添加到xhtml。 –

+0

對不起,我忽略了你的xhtml部分。對於xhtml頁面,您可以使用。只需添加這些。 – sar

相關問題