0

在我们的项目中,我们有用于公司内部网络的 JSF2 页面。但是我们将把这些页面打开到互联网上。因此,每个人都可以使用页面。但是如果用户来自 Internet,则某些字段将不会呈现。

我知道可以为每个组件编写一个渲染属性,例如“userIsInRole”。但是额外的“渲染”控件似乎不是一种高效且优雅的方法。所以我打算通过使用自定义属性来标记将要在线呈现的组件,如下所示:

<h:inputText context="internet" />
...

在 inputText 或组件代码的渲染器中:

if(user is from Internet && context = "internet") {
    return true; // or render... whatever
}

如果组件未标记为 Internet,则意味着它只能在公司内部使用(渲染)。

是否可以根据给定属性使用 JSF2 组件来实现授权?有没有更好的选择?或者我应该为互联网用户设计单独的页面?

我们在项目中使用:PrimeFaces + Spring。

谢谢

4

1 回答 1

1

这是荒唐的。最终使用的努力有什么区别

<h:inputText context="internet" />

相对

<h:inputText rendered="#{intranet}" />

?

如果你唯一的问题是你需要重复整个条件每次都以丑陋的代码结束,就像这样

<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
...

然后只需将条件重构为单个请求范围的变量

<c:set var="intranet" value="#{not (user.hasRole('internet') and context eq 'internet')}" scope="request" />
...
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
...
于 2013-07-17T15:03:42.520 回答