2

首先,非常感谢所有在这个论坛上试图解决我们问题的人;)

我正在使用 struts2+spring3 开发一个 Web 应用程序。我有一个关于如何将变量(数组数组)从动作类传递到jsp页面的问题。

我知道您唯一需要做的就是在我的操作中声明一个私有变量并为该变量声明一个 get 方法,然后可以从 jsp 访问这些变量,我已经完成并且它可以工作。

public class Workspace extends ActionSupport {

private String[][] objects=null;

public String[][] getObjects() {
    return objects;
}

public String execute() throws Exception{

问题是我想在加载整个网页之前从 javascript 代码中访问这个变量。

我尝试过不同的方式,但它从来没有奏效。

$(function() {
var objectsMap=new Array();

    $(document).ready(function() {
          objectsMap = $objects;
    });

两者都不起作用(警报显示:“值:未定义”):

    <s:set name="auxObj" value="%{objects}"/>
    <script>
        alert("Value: "+$("#auxObj").val());
    </script>

任何人都知道我该怎么做?

4

2 回答 2

1

对于 Web 开发初学者来说,重要的是要了解像 JSP 这样的服务器端语言在 Web 服务器上运行,而像 JS 这样的客户端语言在 Web 浏览器上运行。JS 不与 JSP 同步运行。JSP 只生成 HTML/CSS/JS 代码。网络服务器将其发送到网络浏览器。JS 只能看到/理解 HTML。

每当你想给 JS 赋值 JSP 变量时,你需要让 JSP 把它打印出来,就好像它是 JS 代码一样。这是一个使用 JSTL<c:forEach>标记进行迭代的示例Object[][](我相信 Struts 也有它自己的迭代器标记,<s:iterator>但由于我不使用 Struts,我不确定如何使用它以及它是否适用;JSTL 应该也能正常工作)。

<script>
    var objects = [];

    <c:forEach items="${objects}" var="row" varStatus="x">
        objects[${x.index}] = [];
        <c:forEach items="${row}" var="column" varStatus="y">
            objects[${x.index}][${y.index}] = '${column}';
        </c:forEach>
    </c:forEach>
</script>

这样,当 JSP 完成其生成 HTML/JS 代码的任务时,它最终会如下所示,假设您有Object[][]2 行和 2 列(您可以通过在 web 浏览器中打开页面,右键单击它并选择查看来自己验证它来源):

<script>
    var objects = [];
    objects[0] = [];
    objects[0][0] = 'row1col1';
    objects[0][1] = 'row1col2';
    objects[1] = [];
    objects[1][0] = 'row2col1';
    objects[1][1] = 'row2col2';
</script>

这样 JS 代码就可以通过objects.

于 2011-05-07T16:21:51.787 回答
1

谢谢大家,终于成功了,我在这里输入代码以防万一对其他人有用:

    var $linesMap=new Array();

    $(document).ready(function() {
        var $arr;
        <s:iterator value="objects" var="item" status="stat">
            $arr=new Array();
            <s:iterator value="item" var="item2" status="stat2">
                $arr.push(['${item2[0]}','${item2[1]}']);
            </s:iterator>
            $linesMap.push($arr);
        </s:iterator>
        });

然后我可以在 javascript 代码中使用 $linesMap :)

非常感谢,阿莱克斯

于 2011-05-18T23:13:50.200 回答