JSF / Rich Faces中的选项元素

时间:2011-10-31 11:41:05

标签: jsp jsf java-ee richfaces

在一份新工作中做一个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中的元素,而不包含任何框架。

2 个答案:

答案 0 :(得分:1)

如果别的会更好。甚至你可以通过

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

答案 1 :(得分:1)

当您已经在使用服务器端视图技术时,客户端包括类似框架集并不是非常有用。它们不仅对用户体验和搜索引擎优化有害,而且它们允许从服务器端进行非常细微的控制。您应该使用服务器端包含。在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>

当用户具有“ADMIN”角色时,将显示如下:

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

如果用户没有“ADMIN”角色,则如下所示:

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

您可以使用CSS来定位和浮动<div>元素。