Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с ui:repeat тэгом 
:(
    Опции темы
3,14
Дата 27.2.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Не выводиться список из bean-а в страничку.
Сам bean:
Код

package com.my.beans;

import java.util.*;

public class DataBean {
    
    protected int    id;
    protected String msg;
    protected List<DataBean> data = null;

    public DataBean() {
        id  = 0;
        msg = null;
    }
    
    public DataBean(int id, String msg) {
        super();
        this.id = id;
        this.msg = msg;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<DataBean> getData() {
        if (data == null) getDataFromDB();
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }
    
    protected void getDataFromDB() {
        List<DataBean> data = new Vector<DataBean> ();
        data.add(new DataBean(1, "[1]"));
        data.add(new DataBean(2, "[2]"));
        data.add(new DataBean(3, "[3]"));
        data.add(new DataBean(4, "[4]"));
    }
}


Страничка:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html">
<body>

<ui:composition template="/template.jspx">

  <ui:define name="title">
    Success!!!!
  </ui:define>
  
  <ui:define name="body">
    <ui:repeat value="#{dataBean.data}" var="item">
        [<h:outputText value="#{item.msg}"/>]<br/>
    </ui:repeat>
  </ui:define>
  
</ui:composition>

</body>
</html>


При открытии валит в лог ошибку:
Цитата

18:22:05,448 ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
INFO: Added Library from: jar:file:/D:/jboss-4.2.0.GA/server/default/tmp/deploy/tmp17988deploy-exp.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jsf-ui.taglib.xml
18:22:05,464 ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
INFO: Added Library from: jar:file:/D:/jboss-4.2.0.GA/server/default/tmp/deploy/tmp17988deploy-exp.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jstl-fn.taglib.xml
18:22:05,495 ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
INFO: Added Library from: jar:file:/D:/jboss-4.2.0.GA/server/default/tmp/deploy/tmp17988deploy-exp.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jstl-core.taglib.xml
18:22:05,542 ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
INFO: Added Library from: jar:file:/D:/jboss-4.2.0.GA/server/default/tmp/deploy/tmp17988deploy-exp.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jsf-core.taglib.xml
18:22:05,558 ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
INFO: Added Library from: jar:file:/D:/jboss-4.2.0.GA/server/default/tmp/deploy/tmp17988deploy-exp.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jsf-html.taglib.xml
Цитата






--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Maksym
Дата 27.2.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



3,14
Гм.. с такой ошибкой не сталкивался..

В принципе мануал рекомендует использовать ui:repeat для цикла, но сакральный смысл эта тема обретает только при использовании композиции jsfc="ui:repeat". А так можно и jstl'ный тег заюзать... 

Так будет работать?
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jstl/core">
<body>
<ui:composition template="/template.jspx">
  <ui:define name="title">
    Success!!!!
  </ui:define>
  
  <ui:define name="body">
    <c:forEach var="item" items="#{dataBean.data}">
        [<h:outputText value="#{item.msg}"/>]<br/>
    </c:forEach>
  </ui:define>
  
</ui:composition>
</body>
</html>


Добавлено @ 22:02
По поводу ERROR [STDERR] 27.02.2008 18:22:05 com.sun.facelets.compiler.TagLibraryConfig loadImplicit нашел, что это такое. Вкратце, к делу отношения не имеет, можно игнорировать  smile 
Детальнее -- здесь

Это сообщение отредактировал(а) Maksym - 27.2.2008, 22:05
PM MAIL   Вверх
3,14
Дата 28.2.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



м-да, а проблема оказалась совсем не в этом, а вот здесь:
Код

    protected void getDataFromDB() {
        List<DataBean> data = new Vector<DataBean> ();


ессно нужно было:
Код

    protected void getDataFromDB() {
        data = new Vector<DataBean> ();


но всё равно ещё есть проблемы  smile 
написал код в странице:
Код

        <table border="1">
            <tr>
                <td>ID</td>
                <td>Message</td>
                <td>Action</td>
            </tr>
            <tr jsfc="ui:repeat"  value="#{dataBean.data}" var="item">
                <td>#{item.id}</td>
                <td>#{item.msg}</td>
                <td>
                    <h:form>
                        <h:commandLink action="#{item.makeAnotherList}">GET NEW LIST!</h:commandLink>
                    </h:form>
                </td>
            </tr>
        </table>


Добавил метод makeAnotherList в bean:
Код

    public String makeAnotherList() {
        System.out.println("============== making another list!!!!!");
        data = new Vector<DataBean> (1);
        data.add(new DataBean(id, "{" + id + "} - new msg!!!"));
        
        return "maked";
    }

По логам проверил, метод, при нажатии на сылку, вызывается.

Всё равно список на экран выводиться тот же самый, это при том что заполнение в методе get происходит только в том случае, если список пустой:
Код

    public List<DataBean> getData() {
        if (data == null) getDataFromDB();
        return data;
    }



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
3,14
  Дата 28.2.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Инетерсно, а как нибудь вызовы к-ые делаются или пытаются сделать отслеживать можно?
А то я совсем запутался, вот всё такое же работало, а тут не работает, не происодит вызова ф-ии edit класса IpManagerBean.

Код

<h:form>
    <h:commandLink actionListener="#{ipManagerBean.edit}">
        <f:param id="ipId" value="#{addr.id}" />
        Edit
    </h:commandLink>
</h:form>


Сам bean:
Код

public class IpManagerBean {
    public void edit(ActionEvent event) {
        System.out.println("========================");
        
        Map data = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
        IpBean ip = (IpBean) data.get("ipBean");
        UIParameter component = (UIParameter) event.getComponent().findComponent("ipId");
        int id = Integer.parseInt(component.getValue().toString());
        System.out.println("id:" + id + ", bean: " + ip);
        ip.select(id);
    }
}


Bean в faces-config.xml прописан:
Код

   <managed-bean>
    <managed-bean-name>
    ipManagerBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.ip.IpManagerBean</managed-bean-class>
    <managed-bean-scope>
    request</managed-bean-scope>
   </managed-bean>



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Maksym
Дата 29.2.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



3,14
Цитата(3 @ 14, 28.2.2008,  18:30 Найти цитируемый пост)
Инетерсно, а как нибудь вызовы к-ые делаются или 
пытаются сделать отслеживать можно?

В отладке управление не попадает в edit(...)?

ЗЫ. На всякий случай, ActionEvent в коде -- это javax.faces.event.ActionEvent (а то среда может запросто подсунуть какой-нибудь java.awt.event.ActionEvent - сигнатура не совпадет и ниче не вызовется)?

PM MAIL   Вверх
3,14
Дата 2.3.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Maksym, да, не происходил вызов ф-ии. Оказалось это из-за того, что я одну <h:form> случайно в другой сделал...
А есть способ как нибудь автоматизировать поиск таких ошибок? Почти день на эту ерунду убил :(


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 2.3.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Часто тоже сталкивался с подобной ситуацией. Т. е. когда методы, прописанные в атрибутах action или actionListener не вызывались.
В подавляющем большинстве причиной было - пропуск фраймворком фазы "Invoke Application". А вот причины этого могут быть различны, у меня в основном - валидация не проходила.
Цитата(3 @ 14, 2.3.2008,  19:47 Найти цитируемый пост)
А есть способ как нибудь автоматизировать поиск таких ошибок?

У меня, во первых, в шаблоне самого верхнего уровня (тоже использовал facelets) присутствует <h:messages ... />. Кое какие ошибки он показывает.
Ну и во вторых при отладке ставлю точку останова на методе FacesContext.renderResponse(). JavaDoc  к нему:
Цитата

/**
     * <p>Signal the JavaServer faces implementation that, as soon as the
     * current phase of the request processing lifecycle has been completed,
     * control should be passed to the <em>Render Response</em> phase,
     * bypassing any phases that have not been executed yet.</p>
     *
     * @throws IllegalStateException if this method is called after
     *  this instance has been released
     */

При останове, по стек трейсу смотрю на какой фазе вызван и откуда.
Способ конечно не ахти  smile, но пристальней рассмотреть не получилось.
PM MAIL   Вверх
Maksym
Дата 3.3.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



3,14
Попробуй добавить в web.xml:
Код

<web-app>
  ...        
  <!-- Special Debug Output for Development -->
  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
  </context-param>
  ...
</web-app>

Цитата
Setting this to true will cause the FaceletViewHandler to print out debug information in an easy to use screen when an error occurs during the rendering process.


-------------------------------
smile пост # 1111 

Это сообщение отредактировал(а) Maksym - 3.3.2008, 12:54
PM MAIL   Вверх
anglerhood
Дата 19.3.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 23.5.2007
Где: Спб

Репутация: нет
Всего: 3



По поводу проблем с <ui:repeat> смотрите в  Facelets FAQ

Для дебага можно использовать собственную имплементацию PhaseListener. Например, 
Код

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class LifeCycleListener implements PhaseListener {

    public void beforePhase(PhaseEvent event) {
        System.out.println("BeforePhase: " + event.getPhaseId());
    }

    public void afterPhase(PhaseEvent event) {
        System.out.println("AfterPhase: " + event.getPhaseId());
    }

    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }

}


И добавляем в faces-config.xml
Код

    <lifecycle>
        <phase-listener>my.package.name.LifeCycleListener</phase-listener>
    </lifecycle>


Дальше можно добавлять в методы бинов нужные логирующие штуки, например:
Код

private void log(Object object) {
        String methodName = new Exception().getStackTrace()[1].getMethodName();
        System.out.println("MyBeanName " + methodName + ": " + object);
    }


Это сообщение отредактировал(а) anglerhood - 19.3.2008, 18:18
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1299 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.