![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 ? больше готовых компонент ? спасибо |
|||
|
||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
про facelets вроде стало яснее, - вставки в xhtml значений с сервера
а как делать страницы например с постоянной левой частью и меняющейся центральной не ясно. как я понимаю в jsf описано все предсталение, и с помощью binding, value, action и тд.. происходит обмен с серверным кодом. но когда нужно вывести например в одну и туже область страницы разный контент, например при нажатии на один action там будет таблица, а на другой совсем не таблица. я пока увидел только способ выставлять .setRenderer(false) у не нужных panelGroup на данный action, через бин, который связан binding`ом, в итоге надо в каждой панели описать все что в ней может быть, это конечно логично, но долго и длинная jsf может получиться. нет ли еще способа ? спасибо |
|||
|
||||
FlashXL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 7.8.2008 Репутация: 1 Всего: 1 |
Используйте ui:component и ui:include из фэйслетов.
Допустим у вас есть такой компонент в файле /pages/include/someComponent.xhtml:
И соответственно на страничке допустим /pages/somePage.xhtml, там где вам надо вставить компонент, вы пишете:
|
||||
|
|||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
ага, а не придется ли делать на странице проверки в таком случае,
типа <c:if... <ui:include src="/pages/include/someComponent.xhtml" /> <c:if.. <ui:include src="/pages/include/someComponent2.xhtml" /> видимо придется.. а как этого избежать бы ) |
|||
|
||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
>а как делать страницы например с постоянной левой частью и меняющейся центральной не ясно.
использовать iframe =) как вариант -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
>использовать iframe =) как вариант
про постоянную левую часть я просто привел пример ) я более глобально хотел спросить - как менять нужные области страницы без логики на клиенте |
|||
|
||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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/ |
|||
|
||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
>выставление renderer мне кажется чуть ли единственным вариантом, особенно если внутри не просто текст, а другие вложенные теги.
а ну это тот вариант который я выше описал, т.е выставление renderer через биндинг у panelGroup ? еще вопросик, была у меня рабочая jsf страница для регистрации юзеров, превратил ее в xhtml(facelets), теперь при случае когда я ввел имя которое уже в базе есть, вылетает nullpointer(раньше в jsf отрабатывало и писалось что имя занято), а когда новое имя то фсе ок.. не ясно что сломалось как я понял при facelets нужно обрамлять <ui:composition> это замена <f:view>? , нужно ли в этом случае использовать тег <f:view> ? |
|||
|
||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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/ |
|||
|
||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
не обязательно через биндинг (если конечно ты не строишь все дерево представления динамически)
а так в разметке renderer="#{bean.render}" или же позаковырестее renderer="#{bean.render['comp_name']}" хм, а разве в итоге получается не одно и тоже? через биндинг получается что я из сервера выставил значение, а тут jsf читает свойство бина.. разве это не одно тоже в итоге ? ) или я не понимаю |
|||
|
||||
FlashXL |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 7.8.2008 Репутация: 1 Всего: 1 |
f:view не нужен, просто следите чтобы ваши инпуты всегда были в форме.
А чтобы выставлять rendered совершенно не обязательно биндить компонент на объект. Можно сделать так:
Только учитывайте, что если будете перерисовывать панельки аджаксом, то делать надо примерно так:
и ререндерить верхнюю панель, которая всегда видна. |
||||||
|
|||||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
по сути одно и тоже, только лично я против биндинга - это лишняя привязка логики к представлению
-------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
NikitOS9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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"> в ответе нет.. |
|||
|
||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
все что до <ui:composition> отрезается фацелетом.
все остальное берется из шаблона. у тебя при ошибке видимо не обрабатывается шаблон? посмотри что такое <ui:composition> и с чем его едят(используется для...) -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
FlashXL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 7.8.2008 Репутация: 1 Всего: 1 |
<ui:composition> используется для вставки в шаблон. Есть допустим шаблон common.xhtml
Это сообщение отредактировал(а) FlashXL - 14.10.2008, 17:10 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |