2011-04-12 28 views
0

我想創建一個使用Struts 2和JavaScript的webb應用程序,我在將數據從我的動作傳遞到我的javascript時遇到了一些麻煩。
這是我嘗試發送列表/訪問:如何將數據從Struts動作發送到JavaScript?

List<MarkerClass> markers; 

MarkerClass定義acoprding到belove:

final class MarkerClass 
{ 
    public Integer objectId; 
    public String street; 
    public String streetNumber; 
    public String zip; 
    public String city; 
    public Integer statusId; 
    public Float lattitude; 
    public Float longitude; 
} 

動作還包括標記一個getter:

public List<MarkerClass> getMarkers() 
{ 
    return markers; 
} 

在我的jsp文件中我試過這樣做:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html> 
<html> 
<head> 

<script type="text/javascript"> 

function initialize() 
{ 
    var titel = ""; 
    for(var i, "${markers}") 
    { 
     titel = titel+ "${markers[i].street}"; 
    } 
} 

瀏覽器將「$ {marker}」替換爲「[[email protected][email protected]]」
我在猜測有更好更智能的方法要做到這一點,但由於我對Struts有點新,並且正在嘗試在移民的影響下進行編碼,所以答案讓我感到沮喪。

+0

想知道它是如何解決變量$標記不導入表單。 Struts我現在很困惑 – 2011-11-13 13:01:14

回答

2

你不能只在一個javascript函數中使用struts變量,並期望它的工作。請記住,在將頁面的HTML發送到瀏覽器之前,會處理${...}內容。當JavaScript在瀏覽器中呈現時,您只剩下文本表示。你將需要做的是一樣的東西(檢查語法,我沒有用過這個東西,而IA):

function initialize() { 
    var title = ""; 
    <c:foreach var="marker" list="${markers}"> 
     title = title + "${marker.street}"; 
    </c:foreach> 
} 

沿反正那些東西線...基本上看到的JavaScript您的瀏覽器會像

function initialize() { 
    var title = ""; 
    title = title + "Street1"; 
    title = title + "Street2"; 
    title = title + "Street3"; 
    title = title + "Street4"; 
} 

我希望這是有道理的,並與你所問的有關。 順便說一下,通常有更好的方法來完成這個功能,建立動態js等。可能有內置的Struts 2組件,你可以使用?

+0

懷疑我收到的答案,我可能會更好地使用其他類型的方法,可能是ajax,爲我提供所需的數據。謝謝你的回答。 – Skadlig 2011-04-12 14:11:52

2

你必須設置請求或會話變量,然後使用像這樣

var myVar= '<c:out value="${requestScope.myVar}"/>'; 

一個<c:out JSP標籤,然後用你的JS裏面的VAR訪問它。

如果你設置對象中請求或會話必須使用GET方法訪問的屬性的值,然後使用它像這樣:

var myVar= '<c:out value="${requestScope.myObj.attribute}"/>';

(假設你getter方法的getAttribute )

它是不可能在會話或請求直接從JS 希望訪問數據這有助於

0

你可以嘗試訪問它是這樣的。 但您必須使用循環來從列表中獲取每個對象,將它放在值棧上並獲取它的每個對象。否則,你可以問OGNL這樣做對you.something像

<script type="text/javascript"> 

function initialize() 
{ 
    var titel = ""; 
    for(var i, "${markers}") 
    { 
     titel = titel+ <s:property value="%{markers.get(i).street}">; 
    } 
} 

只是嘗試它,因爲OGNL有能力訪問對象的值堆棧

+0

for循環錯誤。 – 2011-04-12 14:26:47

+0

@Steven:我剛剛複製了粘貼來自海報示例的內容,所有這些都增加了基於Struts2的屬性和OGNL表達式,並且贊同它的錯誤:) – 2011-04-12 15:25:35

相關問題