Доступ к объекту модели по EL в функции JavaScript? - PullRequest
1 голос
/ 31 января 2012

Вот моя разметка, я использую базовый тег jtsl

<c:forEach var="attr" items="${attributes}">
    <c:when test='${attr.controlType == "textField"}'>
        <script>createTextField("${attr}");</script>
        </c:when>
</c:forEach>

Итак, «атрибуты» - это список объектов, которые находятся в модели.

Я хочу вызватьФункция createTextField и мне нужен доступ к «attr» в этой функции.

Вот моя функция, но я не могу получить доступ к объекту, говорит, что он не определен.

function createTextField(object) {
    document.write(object.name);        
}

Есть идеи?был бы признателен.

1 Ответ

4 голосов
/ 31 января 2012

Это не сработает.Java и JavaScript не работают в одной среде.В основном вы передаете attr.toString() функции JavaScript, которая по умолчанию выглядит как com.example.ClassName@hashcode.У объекта JavaScript String нет свойства name.

Есть два основных способа заставить его работать:

  1. Вам необходимо преобразоватьJava-объект, представленный #{attr} в виде строки, соответствующей нотации объекта JavaScript (также известной как JSON ).Например,

    <script>createTextField(${attr.asJson});</script>
    

    с чем-то вроде (с небольшой помощью Gson ):

    public String getAsJson() {
        return new Gson().toJson(this);
    }
    

    Конечно, вы также можете вручную построить его, используя StringBuilder или что-то еще,Формат JSON не так уж и сложен.

  2. Передайте только интересующее свойство / свойства, если они могут быть представлены как String.Например,

    <script>createTextField("${attr.name}");</script>
    

    с

    function createTextField(name) {
        document.write(name);        
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...