2010-08-27 65 views
0

我在門戶環境中使用JSF頁面。如果我使用valueChangeListener,則除非使用onclick="submit()",否則該方法不會在後臺Bean中調用。這提交我的網頁,我不想要。與actionListner一樣。valuehchange listener,ajax

此外,如果我使用ajaxRefreshSubmit,則會提交整個頁面而不是提交使用ajaxRefreshSubmit的指定部分。

爲什麼會這樣?是因爲我們在門戶環境中使用它,還是因爲我們錯過了配置文件中的某些內容?

回答

1

只有當您將表單提交到服務器時,valueChangeListener纔會運行。這確實是JSF初學者認爲它在客戶端運行的誤解之一。它不是在網頁瀏覽器中運行的HTML或JavaScript代碼的一部分。它是運行在web服務器上的Java/JSF代碼的一部分。因此,客戶端必須以某種方式從webbrowser向web服務器發送請求。提交表格是其中一種方式。

對於剩餘部分,我沒有關於ajaxRefreshSubmit的任何說法,因爲這是特定於IBM組件庫(我不使用(也不能,因爲它不是開源或免費提供))。如果你在Stackoverflow沒有得到更多的回覆,那麼你最好的選擇可能是在他們自己的論壇developerworks上發佈這個問題。它只是不像這裏那樣活躍和高品質。

+0

但我注意到一件事與價值變化監聽這裏。首先調用construtor,然後進入方法。這是預期的行爲? – user265950 2010-08-27 14:24:29

+0

如果它是一個** request scoped ** bean,是的。另一方面,如果IBM組件庫提供基於Ajax的組件,那麼觸發*部分*提交可能更有用。只是由於缺乏文檔和不能自由使用,我無法回答如何使用它們。 – BalusC 2010-08-27 14:53:25

0

     <h:form id="toilclaimform"> 
         <h:panelGroup id="container"> 
          <!-- Read only version --> 

         <hx:commandExButton type="button" id="testButton2" value="Submit" styleClass="hideRefreshToil" onmousedown="$.resourceManUtilities.formRefreshCookie()" > 
            <hx:behavior event="onclick" id="behavior3" behaviorAction="get" targetAction="container" ></hx:behavior> 
         </hx:commandExButton> 


           <hx:commandExButton onmousedown="runToilVal()" onmouseup="$.resourceManUtilities.formSubmitCookie()" type="submit" id="testButton" value="Submit" styleClass="rmButtons" action="#{toilClaimBean.submit}"> 
            <hx:behavior event="onclick" id="behavior2" behaviorAction="get" targetAction="container" ></hx:behavior> 
           </hx:commandExButton> 


        </h:panelGroup> 


        </h:panelGroup> 
        <hx:ajaxRefreshSubmit id="ajaxRefreshRequest1" onstart="$.resourceManUtilities.ajaxLoadingStarting('form')" oncomplete="$.resourceManUtilities.ajaxFormSubmit('hideRefreshToilList')" target="container"></hx:ajaxRefreshSubmit> 
       </h:form> 


當使用這種庫你知道再使用標準命令按鈕,而不是使用HX命令按鈕,則在上面的代碼的例子。使用此按鈕將確保您不會得到完整的pagr刷新,並會更新所需的portlet。

乾杯