struts2 + spring3: передача переменной из действия в jsp (код JavaScript) - PullRequest
2 голосов
/ 07 мая 2011

Прежде всего, большое спасибо всем, кто пытается решить наши проблемы на этом форуме;)

Я занимаюсь разработкой веб-приложения с Struts2 + Spring3. И у меня есть вопрос о том, как передать переменную (массив массивов) из класса действия на страницу 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>

Кто-нибудь имеет представление о том, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Спасибо, люди, наконец, это работает, я набираю код здесь, если он полезен для другого:

    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>
        });

Тогда я могу использовать $ linesMap в коде JavaScript:)

Большое спасибо, Aleix

1 голос
/ 07 мая 2011

Для начинающих веб-разработчиков важно понимать, что языки на стороне сервера, такие как JSP, работают на веб-сервере, а языки на стороне клиента, такие как JS, работают на веб-браузере.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, предполагая, что у вас есть Object[][]с 2 строками и 2 столбцами (вы можете проверить это самостоятельно, открыв страницу в веб-браузере, щелкнув ее правой кнопкой мыши и выбрав Просмотреть исходный код ):

<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.

...