【问题标题】:How do I send data from Struts action to javascript?如何将数据从 Struts 动作发送到 javascript?
【发布时间】:2011-04-12 13:37:15
【问题描述】:

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

List<MarkerClass> markers;  

MarkerClass 是根据 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}";
    }
}

浏览器将“${markers}”替换为“[se.fubar.test.MarkerClass@37a4, se.fubar.test.MarkerClass@9ad97c]”
我猜有一种更好、更聪明的方法可以做到这一点,但由于我对 Struts 有点陌生,并且在 migrane 的影响下尝试编码,所以答案让我难以理解。

【问题讨论】:

  • 想知道它如何在不导入表单的情况下解析 $ 变量标记。 Struts 我现在对此感到困惑

标签: java javascript struts2


【解决方案1】:

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

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 组件可以使用?

【讨论】:

  • 从我收到的答案中怀疑我可能会更好地使用其他类型的方法,可能是 ajax,来为我提供我需要的数据。谢谢你的回答。
【解决方案2】:

您必须在请求或会话中设置该变量,然后使用&lt;c:out jsp 标签访问它

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

然后在你的 js 中使用 var。

如果您在请求或会话中设置对象,则必须使用 get 方法来访问属性的值,然后像这样使用它:

var myVar= '&lt;c:out value="${requestScope.myObj.attribute}"/&gt;';

(假设你的getter方法是getAttribute)

无法直接从 js 访问 session 中的数据或请求 希望这会有所帮助

【讨论】:

    【解决方案3】:

    您可以在服务器上将对象转换为 json(请参阅 http://www.json.org/java/index.html ),然后在字符串上调用 eval() 以获取对象的 javascript 表示形式。

    【讨论】:

      【解决方案4】:

      您可以尝试像这样访问它。 但是您必须使用循环从列表中获取每个对象,然后将其放在值堆栈中,然后获取它的每个对象。否则,您可以要求 ognl 为您执行此操作。类似

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

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

      【讨论】:

      • @Steven:我刚刚复制粘贴了海报示例中的所有内容,都喜欢为此添加基于 Struts2 的属性和 OGNL 表达式。是的,同意它的错误:)
      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 2012-01-09
      • 2011-03-21
      • 1970-01-01
      • 2021-08-23
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多