如何将数据从Struts操作发送到javascript?

如何将数据从Struts操作发送到javascript?,java,javascript,struts2,Java,Javascript,Struts2,我正在尝试使用Struts 2和javascript创建一个webb应用程序,但在将数据从操作传递到javascript时遇到了一些问题。 这是我试图发送/访问的列表: List<MarkerClass> markers; 该操作还包括标记的getter: public List<MarkerClass> getMarkers() { return markers; } public List getMarkers() { 返回标记; } 在我的jsp文

我正在尝试使用Struts 2和javascript创建一个webb应用程序,但在将数据从操作传递到javascript时遇到了一些问题。
这是我试图发送/访问的列表:

List<MarkerClass> markers;  
该操作还包括标记的getter:

public List<MarkerClass> getMarkers()
{
    return markers;
}
public List getMarkers()
{
返回标记;
}
在我的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}";
    }
}

函数初始化()
{
var titel=“”;
对于(var i,“${markers}”)
{
titel=titel+“${markers[i].street}”;
}
}
浏览器将“${markers}”替换为“[se.fubar.test”。MarkerClass@37a4,se.fubar.test。MarkerClass@9ad97c]“

我想有一种更好更聪明的方法可以做到这一点,但由于我对Struts有点陌生,并且在偏头痛的影响下试图编写代码,所以答案让我困惑

您必须在请求或会话中设置该变量,然后使用
访问它。您必须在请求或会话中设置该变量,然后使用
访问它。您可以在服务器上将对象转换为json(请参阅),然后调用eval()在字符串上获取对象的javascript表示。

您可以在服务器上将对象转换为json(请参阅),然后在字符串上调用eval()以获取对象的javascript表示。

您不能在javascript函数中仅使用struts变量并期望它工作。请记住,
${…}
内容在页面的HTML发送到浏览器之前得到处理。当javascript在浏览器中呈现时,只剩下文本表示。您需要做的是(检查语法,我有一段时间没用过这个东西了):

我希望这是有道理的,并且与你所问的有关。
顺便说一句,通常有更好的方法来实现这一功能,比如构建动态js等。可能有内置的Struts 2组件可以使用?

您不能在javascript函数中使用Struts变量并期望它工作。请记住,
${…}
内容在页面的HTML发送到浏览器之前得到处理。当javascript在浏览器中呈现时,只剩下文本表示。您需要做的是(检查语法,我有一段时间没用过这个东西了):

我希望这是有道理的,并且与你所问的有关。
顺便说一句,通常有更好的方法来实现这一功能,比如构建动态js等。可能有内置的Struts 2组件可以使用?

您可以尝试访问类似这样的组件。 但是您必须使用循环从列表中获取每个对象,然后将其放在值堆栈上,然后获取其中的每个对象

<script type="text/javascript">

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

函数初始化()
{
var titel=“”;
对于(var i,“${markers}”)
{
滴度=滴度+;
}
}

只需尝试一下,因为OGNL有能力访问值堆栈上的对象

您可以尝试这样访问它。 但是您必须使用循环从列表中获取每个对象,然后将其放在值堆栈上,然后获取其中的每个对象

<script type="text/javascript">

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

函数初始化()
{
var titel=“”;
对于(var i,“${markers}”)
{
滴度=滴度+;
}
}

试一下吧,因为OGNL有能力访问值堆栈上的对象

从我收到的答案来看,我怀疑使用其他类型的方法(可能是ajax)向我提供所需的数据可能会更好。感谢您的回答。从我收到的答案来看,我怀疑使用其他类型的方法(可能是ajax)向我提供所需的数据可能会更好。谢谢你的回答。@Steven:我刚刚复制粘贴了海报示例中的内容,所有a都喜欢为此添加基于Struts2的属性和OGNL表达式。是的,同意它的错误:)@Steven:我刚刚复制粘贴了海报示例中的内容,所有a都喜欢为此添加基于Struts2的属性和OGNL表达式。是的同意它的错误:)想知道它如何在不导入表单的情况下解析$variable标记。Struts我现在对此感到困惑,我想知道它如何在不导入表单的情况下解析$variable标记。Struts我现在对此感到困惑
function initialize() {
    var title = "";
    <c:foreach var="marker" list="${markers}">
         title = title + "${marker.street}";
    </c:foreach>
}
function initialize() {
    var title = "";
    title = title + "Street1";
    title = title + "Street2";
    title = title + "Street3";
    title = title + "Street4";
}
<script type="text/javascript">

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