2013-07-17 53 views
0

在我們的項目中,我們擁有公司內部網絡中使用的JSF2頁面。但我們打算將這些網頁打開到Internet。所以每個人都可以看到網頁。但是如果用戶來自Internet,則某些字段將不會呈現。JSF2組件的授權

我知道有可能爲每個組件(如「userIsInRole」)編寫呈現屬性。但額外的「渲染」控制似乎不是高效和優雅的方法。所以,我打算慶祝其將要使用的自定義屬性的在線呈現組件如下圖所示:

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

在inputText的或組件代碼的渲染:

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

如果一個組件沒有標記爲互聯網,那麼這意味着它只能從公司內部獲得(呈現)。

是否有可能根據給定的屬性使用JSF2組件實現授權?有沒有更好的選擇?還是應該爲互聯網用戶設計單獨的頁面?

我們在我們的項目中使用:PrimeFaces + Spring。

謝謝

回答

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}" /> 
...