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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> навигация на странице jsf 
:(
    Опции темы
NikitOS9
Дата 13.10.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



с jsf знаком не давно, и не очень понимаю как лучше сделать..

есть страница, на которой в левой части находится меню навигации, сделал его из множества commandLink ов.
при нажатии на какой либо commandLink, средняя часть страницы должна менятся.
одна из мыслей, это написать фсе в одном файле jsf, и взависимости какой action нажат, на серваке обьекты заполняются, а в этой jsf описано то что должно быть видно или нет,
через panelGroup, например
<h:panelGroup id="noneContract" binding=""controller.statePanel1>
... а тут что должно быть показано в этой панели..
...
<h:panelGroup id="noneContract" binding=""controller.statePanel2>
... а тут что должно быть показано в этой панели..
...

в бине controller, взависимости от action выполняется statePanelX.setRenderer(true) или false.
таким образом на jsf нет никой логики, но минус в том что если на jsf есть много сменных панелей(различного контента) она получается довольно длинной
еще как вариант можно через rich faces a4j сделать смену средней части, хотя кажется что можно и без это библиотеки обойтись
интересно услышать как лучше

еще вопрос про валидаторы, можно ли переопределить валидатор у стандартной компоненты, например у h:inputSecret, или валидаторы только у своих компонент можно делать свои ?

и про facelets вопросик, если кратко то в чем отличие от jsf ? больше готовых компонент ?

спасибо




PM MAIL   Вверх
NikitOS9
Дата 14.10.2008, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



про facelets вроде стало яснее, - вставки в xhtml значений с сервера

а как делать страницы например с постоянной левой частью и меняющейся центральной не ясно.
как я понимаю в jsf описано все предсталение, и с помощью binding, value, action и тд.. происходит обмен с серверным кодом.
но когда нужно вывести например в одну и туже область страницы разный контент, например при нажатии на один action там будет таблица, а на другой совсем не таблица. я пока увидел только способ выставлять .setRenderer(false) у не нужных panelGroup на данный action, через бин, который связан binding`ом, в итоге надо в каждой панели описать все что в ней может быть, это конечно логично, но долго и длинная jsf может получиться.
нет ли еще способа ?

спасибо

PM MAIL   Вверх
FlashXL
Дата 14.10.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Используйте ui:component и ui:include из фэйслетов.

Допустим у вас есть такой компонент в файле /pages/include/someComponent.xhtml:

Код

<ui:component xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j">
    <h:panelGroup>
        // ваш контент
    </h:panelGroup>
</ui:component>


И соответственно на страничке допустим /pages/somePage.xhtml, там где вам надо вставить компонент, вы пишете:

Код

<ui:include src="/pages/include/someComponent.xhtml" />

PM MAIL   Вверх
NikitOS9
Дата 14.10.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ага, а не придется ли делать на странице проверки в таком случае, 
типа
 <c:if...  
  <ui:include src="/pages/include/someComponent.xhtml" />
 <c:if..
  <ui:include src="/pages/include/someComponent2.xhtml" />
видимо придется..
а как этого избежать бы )

PM MAIL   Вверх
necromancer
Дата 14.10.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 7



>а как делать страницы например с постоянной левой частью и меняющейся центральной не ясно.
использовать iframe =) как вариант


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
NikitOS9
Дата 14.10.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



>использовать iframe =) как вариант
про постоянную левую часть я просто привел пример )
я более глобально хотел спросить - как менять нужные области страницы без логики на клиенте

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


Опытный
**


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

Репутация: 6
Всего: 7



вот ожин из вариантов:
http://www.netbeans.org/kb/60/web/pagefragments.html
не скрою лично от NB и Woodstock не в восторге (хотя некоторые компонеты заслуживают внимания)

выставление renderer мне кажется чуть ли единственным вариантом, особенно если внутри не просто текст, а другие вложенные теги.


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
NikitOS9
Дата 14.10.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



>выставление renderer мне кажется чуть ли единственным вариантом, особенно если внутри не просто текст, а другие вложенные теги.

а ну это тот вариант который я выше описал, т.е выставление renderer через биндинг у panelGroup ?

еще вопросик, 
была у меня рабочая jsf страница для регистрации юзеров, превратил ее в xhtml(facelets), теперь при случае когда я ввел имя которое уже в базе есть, вылетает nullpointer(раньше в jsf отрабатывало и писалось что имя занято), а когда новое имя то фсе ок.. не ясно что сломалось

как я понял при facelets нужно обрамлять <ui:composition> это замена <f:view>? , нужно ли в этом случае использовать тег <f:view> ?
PM MAIL   Вверх
necromancer
Дата 14.10.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 7



через биндинг у panelGroup
не обязательно через биндинг (если конечно ты не строишь все дерево представления динамически)
а так в разметке
renderer="#{bean.render}"
или же позаковырестее
renderer="#{bean.render['comp_name']}"

facelets это шаблоны+jstl+еще кое что
т.е. ты создаешь сначала шаблон, затем страницу, которая использует этот шаблон включая в него свой вывод.
очень хорошая статья:
http://www.ibm.com/developerworks/java/library/j-facelets/

ошибку нужно обрамлять в try catch в компоненте, тогда и проблем будет меньше:
try {
    ...insertuser...
} catch(SQLException e) {
    if (e instanceof Unique....) {
          ... add some message to JSF output see FacesMessage and FacesContext.getInstance().addMessage
    }
}



--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
NikitOS9
Дата 14.10.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



не обязательно через биндинг (если конечно ты не строишь все дерево представления динамически)
а так в разметке
renderer="#{bean.render}"
или же позаковырестее
renderer="#{bean.render['comp_name']}"

хм, а разве в итоге получается не одно и тоже?
через биндинг получается что я из сервера выставил значение, а тут 
jsf читает свойство бина.. разве это не одно тоже в итоге ? ) или я не понимаю

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


Новичок



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

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



f:view не нужен, просто следите чтобы ваши инпуты всегда были в форме.

А чтобы выставлять rendered совершенно не обязательно биндить компонент на объект. Можно сделать так:

Код

<h:panelGroup id="panel" rendered="#{bean.panelRendered}">
   // content
</h:panelGroup>


Код

public boolean isPanelRendered() {
   return flag;
}


Только учитывайте, что если будете перерисовывать панельки аджаксом, то делать надо примерно так:
Код

<h:panelGroup id="panel">
   <h:panelGroup rendered="#{bean.panelRendered}">
      // content
   </h:panelGroup>
</h:panelGroup>

и ререндерить верхнюю панель, которая всегда видна.
PM MAIL   Вверх
necromancer
Дата 14.10.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 7



по сути одно и тоже, только лично я против биндинга - это лишняя привязка логики к представлению


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
NikitOS9
  Дата 14.10.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



разобрался с ошибками все ок, но имеет место не понятная весчь )
когда страница как xhtml - facelets, то ответ приходит урезанный
т.е страница начинается с места 

<form id="j_id0" name="j_id0" method="post" action="/faces/content/login.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_id0" value="j_id0" />
...
а начала где в исходнике есть это 

<!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:f="http://java.sun.com/jsf/core">
  <head><title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="/styles/login.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
....
  <ui:composition>
    <h:form>
      <div class="area">


в ответе нет..  
PM MAIL   Вверх
necromancer
Дата 14.10.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 7



все что до  <ui:composition> отрезается фацелетом. 
все остальное берется из шаблона.
у тебя при ошибке видимо не обрабатывается шаблон?
посмотри что такое   <ui:composition> и с чем его едят(используется для...)


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
FlashXL
Дата 14.10.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



<ui:composition> используется для вставки в шаблон. Есть допустим шаблон common.xhtml
Код

<!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:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Title</title>

    <style type="text/css">
    </style>
</head>
<body>
    <div><ui:insert name="myInclude" /></div>
</body>
</html>


Код

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j"
    template="/templates/common.xhtml">
    <ui:define name="myInclude">
         //content
    </ui:define>
</ui:composition>


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

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

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


 




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


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

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