Переменная не может использоваться в c: if, но существует, когда выводится с использованием h: outputText [duplicate]

Он возвращает список, подобный массиву.

Вы делаете этот массив как пример

var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);  
0
задан BalusC 20 March 2012 в 19:04
поделиться

1 ответ

Теги JSTL и компоненты интерфейса JSF не синхронизируются, как вы ожидали от кодирования. Короче говоря: JSTL в JSF2 Facelets ... имеет смысл? Внимательно прочитайте это.

В вашем конкретном случае условие тега JSTL <c:if>, похоже, зависит от результат тега JSF <f:event>. В настоящий момент <c:if> запускается во время времени сборки, <f:event> еще не запущен, поскольку он выполняется во время предварительного просмотра представления. Следовательно, #{mBlog.blog.id} всегда null или любое другое значение по умолчанию.

Вместо этого вам нужно использовать атрибут rendered компонента JSF. Это также улучшает ваш код.

<h:commandButton value="Update" action="#{mBlog.update}" rendered="#{mBlog.blog.id gt 0}" />
<h:commandButton value="Save" action="#{mBlog.save}" rendered="#{mBlog.blog.id eq 0}" />

У вас есть еще одна потенциальная будущая проблема при вызове действия. Убедитесь, что компонент вставляется в область видимости, а не в область запроса.

4
ответ дан Community 22 August 2018 в 23:25
поделиться
  • 1
    Спасибо за ответ. Я сделал это, прежде чем придти в jstl. Когда я делаю это, кнопка jsf не вызывает метод (т.е. метод update () в bean-компоненте). Я разделил их на две формы. Нехорошо, как я могу выжить. – Elbek 20 March 2012 в 21:30
  • 2
    Так что ваш боб был не в виду. См. Также последнее предложение в моем ответе. Этот симптом типичен для бранд-зонда с запросом, в котором кнопка отображается на основе некоторого условия, основанного на запросе, которое неправильно оценивается во время фазы запроса запроса запроса следующего запроса. Если создание области видимости бобов действительно не является вариантом, вам нужно будет перемещать все, что f:event делает в метод @PostConstruct, и использовать @ManagedProperty вместо <f:viewParam>. – BalusC 20 March 2012 в 21:31
  • 3
    Кстати, я нашел проблему. Проблема в этой странице там, где прослушиватель prerenderview на этой странице. Но jsf вызывает этот метод после рендеринга всех тэгов jstl. то есть в jstl mBlog.blog.id coming null. Я устанавливаю блог attr в прослушивании prerenderview, но этот прослушиватель вызывается после разрыва тега jstl на этой странице. Я не знаю, но, похоже, это не должно быть так. JSF должен вызывать первое связывание слушателя с этой страницей, а затем отображать. Но это делается в обратном порядке. – Elbek 20 March 2012 в 21:33
  • 4
    Нет вашей проблемы в том, что вы неправильно поняли жизненный цикл тегов JSTL и жизненный цикл JSF. Как сказано, пожалуйста, внимательно прочитайте связанный ответ stackoverflow.com/questions/3342984/… Еще одно интересное сообщение: stackoverflow.com/questions/2118656/… ( пункт 5 применим для вас). – BalusC 20 March 2012 в 21:34
  • 5
    Тег SO JSTL получает визуализацию перед вызовом прослушивателя prerenderview? – Elbek 20 March 2012 в 21:35
Другие вопросы по тегам:

Похожие вопросы: