struts2+spring3:将变量从动作传递给JSP(JavaScript代码)

struts2+spring3: passing a variable from action to jsp (javascript code)

本文关键字:JSP JavaScript 代码 变量 struts2+spring3      更新时间:2023-09-26

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

我正在开发一个带有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>

有人知道我该怎么做吗?

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

每当你想要将JSP变量分配给JS时,你需要让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 代码的任务时,假设您有一个包含 2 行和 2 列的Object[][](您可以通过在 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访问它。

谢谢大家,它终于可以工作了,我在这里输入代码,以防对其他代码有用:

    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:)

谢谢阿莱克斯