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