2013-12-15 15 views
1

怎樣才能將<sj:submit>的目標設置爲頂端。struts 2 jquery插件設置表格目標

作爲一個樣本登錄頁面應該阿賈克斯基地驗證後打開新的目的:

<s:form id="loginForm" action="login-process-result" namespace="/security" > 

    <sj:submit button="true" 
     validateFunction="formValidator" validate="true" key="form.btn.login /> 
</s:form> 

我試圖sj:submit targetss:form target,沒有任何的工作!

我不想使用s:submit,因爲表單驗證必須通過Ajax完成。

+0

你是什麼意思的頂部? –

+0

我的意思是形式鏈接的目標,因爲你現在的目標可能是_balnk,_self,_parent,_top。但我不知道如何在這裏設置它。我發現了一些工作,但希望能找到更好的答案! –

回答

0

要遵循的struts2 jquery的ajax validationtarget概念,我用以下溶液:

登錄-form.jsp(沒有目標被設定):

<s:form id="loginForm" action="login-process-result" namespace="/security" > 
    <sj:submit button="true" 
     validateFunction="formValidator" validate="true" key="form.btn.login /> 
</s:form> 

的操作(與驗證)

@Action(value = "login-process-result") 
    @Validations(requiredStrings={ 
      @RequiredStringValidator(fieldName="userID",key="validate.required"), 
      @RequiredStringValidator(fieldName="password",key="validate.required")}) 
    public String result() throws ClientException{ 

      //Authentication login goes here 
      return SUCCESS; 
    } 

最後結果窗體做的伎倆,是一個正常的jsp通過javascript來改變窗口的位置

頁面顯示成功消息,並在更改url之前進行一個小延遲,這是可選的,可以刪除。

<%@ page contentType="text/html; charset=utf-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 

You have logged in successfully .... 
<br/> 
<img src="images/loggin-in-progress.gif" /> 
<s:url var="url" action="private-page" namespace="/"/> 

<script type="text/javascript"> 
    function reload() { 
     window.location.href = "${url}"; 
    } 

    $(document).ready(function() { 
     setTimeout('reload()', 800); 
    }); 

</script> 
2

把它的形式,而不是提交標籤:

<s:form action = "login-process-result" 
    namespace = "/security" 
      id = "loginForm" 
     target = "_top" > 

但你知道這是你想要的嗎? Take a look at how target="_top" works

從你的描述來看,我不這麼認爲。

+0

如果我使用s:form我失去了struts 2 jquery插件ajax驗證! –

+0

你已經在你的代碼中使用s:form了。 ?而順便說一句,這是其他選擇? (除了HTML表單,這也起作用)? –

+0

我犯了一個錯誤!我的意思是「如果我使用s:form with target =」_ top「,我會失去struts 2 jquery插件的ajax驗證!」正如你所提到的,target =「_ top」正在工作,但是當你使用它與jQuery Ajax驗證時,無論表單是否有有效輸入,表單總是以_top爲目標。我正在尋找框架是否支持以下內容:通過ajax保持驗證形式,並在動作成功完成時將表單發送至_top。 –

1

我不知道爲什麼你需要這樣的行爲。

我可以想象的只是通過使用struts2 jquery插件通過Ajax更新頁面的特定部分來提交表單&獲取響應並將其推送到DOM。

這裏是你可以做什麼:

  1. 通過AJAX提交表單
  2. 請在服務器端
  3. 驗證請返回填寫頁面的所需區域的響應。

爲了做到這一點使用Struts2的jQuery插件,你可以使用onCompleteTopics & onErrorTopicssj:submit

JSP

<s:form action="myAction"> 
<!-- form elements --> 
<sj:submit onCompleteTopics="success" onErrorTopics="error"/> 
</s:form> 

的Javascript

$.subscribe('success',function(event){ 
    var responseText=event.originalEvent.responseText; 
}); 

以上是未測試代碼,但我確定它解釋瞭如何參加p在手中。

+0

我得到了你提到的想法。順便說一句,我不知道爲什麼onErrorTopics從未發佈! –

+2

'onErrorTopics'適用於4xx和5xx響應狀態碼。 –