2013-01-24 36 views
4

好的,我會盡量簡化和容易地遵循。重新加載JSP中嵌入的struts2動作

我正在使用JQuery完整日曆並向用戶顯示事件。我在頁面上有一個Filter動作,允許用戶根據不同的標準過濾顯示的事件。其中一個標準是事件名稱。最終目標是讓過濾器從全日曆視圖中重新加載可選的「事件名稱」選項。

我有這個工作,但它不同步。

我的JSP,包括過濾器是這樣的:

<div id="popUpFilterInfo" class="filterPopUp">  
<s:action name="ScheduleFilter" executeResult="true" id="scheduleFilter"></s:action>   
</div> 

這將返回另一個JSP頁,其中包括過濾器表。 Struts在頁面呈現時運行,所以這個過濾器是在視圖生成之前構建的。當用戶選擇一個按鈕時,這個過濾器會被隱藏/顯示爲jQuery。

頁面動作是從篩選器操作不同,因爲這個篩選器操作,將需要包括多頁

全日曆加載後內,將其歷史可追溯至存儲這些日期到頁面動作爲應用程序在全局上下文中篩選對象。

我遇到的問題是,當視圖更改時,我無法讓頁面重新加載篩選器。如果我重新加載整個頁面,那麼過濾器確實包含前一個視圖的數據,所以我知道我只需告訴頁面重新呈現ScheduleFilter表單。我試圖用jQuery這樣做,因爲這樣:

var filter = "<s:action name=\"ScheduleFilter\" executeResult=\"true\" id=\"scheduleFilter\"></s:action>"; 
jQuery('#popUpFilterInfo').children().remove(); 
jQuery('#popUpFilterInfo').append(filter); 

這將引發JasperException說「報價符號預期」在哪裏filter變量被實例化線路。在名稱中間指定字符'm'就是問題所在。

有沒有人知道如何重新加載像這樣的嵌入式操作,而無需重新加載整個頁面?

答案

戴維下面說,不要嵌入與<s:action>標籤的動作。我切換了這個,而是用Ajax調用動作,一旦成功,然後我使用jQuery將返回的數據插入到我的Filter形式div中。我把一個檢查,看看div是否爲空,並清除如果它已經有一個過濾器的div。下面是一個例子

我的過濾格:

<div id="popUpFilterInfo" class="filterPopUp"></div> 

行動呼籲:

function loadFilter() { 
    if(!jQuery('#popUpFilterInfo').is(':empty')){ 
     jQuery('#popUpFilterInfo').children().remove();   
    } 
    jQuery.ajax({ 
     url:'Filter.action', 
     data:"", 
     dataType: "", 
     type: "GET", 
     success: function(filter) { 
      jQuery('#popUpFilterInfo').append(filter); 
     } 
    }); 
} 
+1

即使它「工作」,也不會,因爲您會將未評估的標籤放入頁面中間。 *不工作的原因是因爲''標籤在客戶端(及其JavaScript引擎)曾經看到渲染輸出之前在服務器*上被評估*。難道你不能只用Ajax加載action標籤呈現的部分嗎? –

+0

謝謝戴夫,這個伎倆。 – Nathan24

+2

@ Nathan24爲什麼不把你的解決方案作爲答案。 –

回答

1

在代表@ Nathan24我張貼這個答案的。

正如戴夫下面所說,不要在標籤中嵌入動作。我切換了這個,而是用Ajax調用動作,一旦成功,然後我使用jQuery將返回的數據插入到我的Filter形式div中。我把一個檢查,看看div是否爲空,並清除如果它已經有一個過濾器的div。下面是一個例子

我的過濾格:

<div id="popUpFilterInfo" class="filterPopUp"></div> 

行動呼籲:

function loadFilter() { 
    if(!jQuery('#popUpFilterInfo').is(':empty')){ 
     jQuery('#popUpFilterInfo').children().remove();   
    } 
    jQuery.ajax({ 
     url:'Filter.action', 
     data:"", 
     dataType: "", 
     type: "GET", 
     success: function(filter) { 
      jQuery('#popUpFilterInfo').append(filter); 
    } 
}); 
} 

我是這麼認爲的人不會錯過這個問題,這可能是一些其他的帖子這是回答有用。如果我錯了,讓我知道我會刪除這個答案。謝謝。

相關問題