2011-11-24 108 views
2

我有一個搜索函數,它將對象的數組列表返回給我的表單。我使用JSTL的foreach標籤遍歷列表。將參數傳遞給查詢字符串並激發Javascript函數

<c:forEach items="${searchResults}" var="contact" varStatus="loop"> 
<div style="padding: 5px;"> 
${contact.firstName} ${contact.lastName} 
<br> 
${contact.primaryPhone} 
<br> 

//Is this the proper way to set up the url? 
<a href="Contacts?search=${param.search}&id=${loop.index}">View Contact</a> 

</div> 
<br> 
</c:forEach> 

當用戶點擊每行內的鏈接,該行索引傳遞給查詢字符串,並在這一點上,我想表明,包含用戶的附加信息覈實。

我有一個JavaScript函數,我用它來顯示div並將它居中在屏幕上bla bla bla,但是我的問題是如何刷新頁面並將index加載到querystring中,然後激發我的javascript函數?

我認爲使用:

<c:if test="${not empty param.id}"> 
//Check if id in querystring is available and if so, display popup 
</c:if> 

要檢查是否有查詢字符串中使用的索引,但我不認爲這是一種從一個JSTL標籤內觸發我的功能。

當我請求回到servlet而不是試圖在客戶端處理這個問題時,我應該在服務器端做些什麼?我只是認爲它浪費了重新查詢我的數據庫並設置了另一個請求參數,當我已經有了我需要存儲在參數中的信息時,我無論如何都顯示了我的列表。

回答

0

我最終與在查詢字符串每次檢查我的id參數想出解決辦法的頁面負載(用JavaScript)

function init(){ 
console.log("Contacts page loaded."); 

//Loads popup if 'id' is present in the querystring. 
if(getQuerystring('id', 'null') !== 'null') { 
    showCenteredDiv('popup'); 
} 
}; 

我用它來檢查查詢字符串的功能是:

//Search querystring for a specific parameter. Second arg is the value to display if its not found. 
function getQuerystring(key, default_) 
{ 
    if (default_==null) default_=""; 

    key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); 
    var qs = regex.exec(window.location.href); 

    if(qs == null) { 
    return default_; 
    } else { 
    return qs[1]; 
    } 
} 
0

您可以在參數檢查中嵌入腳本標記,並在其中運行任何您想要的內容。例如,設置一些可以稍後測試的變量,當頁面完成加載時。 或者,如果您在頁面中足夠延遲地嵌入參數檢查,則只需調用您的函數即可。

<c:if test="${not empty param.id}"> 
    <script> 
     runSomeFunction(); 
    </script> 
</c:if> 
+0

這是行不通的,但爲了保持一個更乾淨的HTML並保留所有的javascript在外部文件,我想出了另一種解決方案。 – ryandlf