Дополнительные элементы в JSF / Rich Faces

#jsp #jsf #jakarta-ee #richfaces

#jsp #jsf #джакарта-ee #богатые грани

Вопрос:

Выполняю проект RichFaces / jsf на новой работе, давно этим не занимался.

На главной странице есть страница xhtml с набором фреймов. В идеальном мире этого не было бы, но оно есть, и оно должно оставаться таким, но когда вы входите в систему как пользователь определенного уровня, боковые рамки не используются.

 <frameset cols="#{Base.sideBars['left'].width},*,#{Base.sideBars['right'].width}" id="contentframes" >
<frame name="left" src="left.jsf" id="leftframe"/>
<frame name="center" src="center.jsf" id="centerframe" />
<frame name="right" src="right.jsf" id="rightframe" />
</frameset>
  

есть ли «собственный» способ изменить это, чтобы я просто включил центральную рамку, или просто проще изменить ее на jsp и поместить вокруг нее if / else?

Что мне нужно, так это результирующий html, который выглядит следующим образом:

 <frameset cols="20,*,20" id="contentframes" >
<frame name="left" src="left.jsf" id="leftframe"/>
<frame name="center" src="center.jsf" id="centerframe" />
<frame name="right" src="right.jsf" id="rightframe" />
</frameset>
  

когда вы входите в систему как один пользователь, но если входит другой пользователь, вы просто включаете элементы, которые были в centerframe.jsf, без каких-либо фреймов вообще.

Ответ №1:

если бы еще было лучше. или даже вы можете управлять этим с помощью

 <frame name="center" src="#{someBean.centerPage}.jsf" id="centerframe" />
  

Комментарии:

1. Не уверен, что вы имеете в виду — это все еще фрейм, мне нужно избавиться от набора фреймов. Я внес изменения в вопрос на случай, если он неясен

2. ну, я ответил, что вы хотите динамически вставлять фреймы, для этого есть два способа, если сначала.. еще можно условно вставить или использовать значение компонента для оценки целевой страницы

3. Извините за мою неясность, теперь я исправил ее. Я хочу, чтобы у меня не было фреймов (или, я думаю, может быть, набора фреймов из одного, я полагаю), если другой пользователь войдет в систему. Мне нужно убить левый и правый фреймы.

4. тогда вы можете просто поставить условные вещи .. или даже лучше перейти на facelets

5. Не слишком подробно, но со ссылкой на вашу страницу в вашем ответе мне пришло в голову, что я могу просто включить пользовательский интерфейс с деталями из компонента в имени файла страницы, на которой есть фреймы, или страницы, на которой их нет, поэтому, хотя на самом деле это не тот ответ, который он помог мне найти это, спасибо

Ответ №2:

Клиентские включения, подобные наборам фреймов, не очень полезны, когда вы уже используете технологию просмотра на стороне сервера. Они не только вредны для пользовательского интерфейса и SEO, но и позволяют очень мало мелкозернистого управления со стороны сервера. Вместо этого вы должны использовать серверные включения. В JSF вы можете использовать rendered атрибут для условного отображения содержимого.

 <h:panelGroup id="left" layout="block" rendered="#{user.hasRole('ADMIN')}">
    <ui:include src="left.xhtml" />
</h:panelGroup>
<h:panelGroup id="center" layout="block">
    <ui:include src="center.xhtml" />
</h:panelGroup>
<h:panelGroup id="right" layout="block" rendered="#{user.hasRole('ADMIN')}">
    <ui:include src="right.xhtml" />
</h:panelGroup>
  

Это будет отображаться следующим образом, когда у пользователя есть роль «АДМИНИСТРАТОР»:

 <div id="left">
    left.xhtml content
</div>
<div id="center">
    center.xhtml content
</div>
<div id="right">
    right.xhtml content
</div>
  

И следующим образом, если пользователь не имеет роли «АДМИНИСТРАТОР»:

 <div id="center">
    center.xhtml content
</div>
  

Вы можете использовать CSS для позиционирования и <div> перемещения элементов.

Комментарии:

1. Как я уже сказал в вопросе, у него есть фреймы, и он должен оставаться таким. Я понимаю, что это не идеально для пользовательского интерфейса (SEO вообще не имеет значения), поэтому я сказал, что хотел бы, чтобы этого не было! Тем не менее, полезная информация, поэтому я ее отмечу