レンダリングされた属性からメソッドを呼び出していますが、メソッドがRENDER_RESPONSEフェーズで複数回トリガーされていることに気付きました。
また、メソッドが他のフェーズ(APPLY_REQUEST_VALUES、PROCESS_VALIDATIONSなど)でも何度もトリガーされていることにも気づきました。
これらの呼び出しの背後にある理由が伝えられた関連クエリ(レンダリングされた属性によってゲッターが何度も呼び出されるのはなぜですか? )を見ました。
メソッドが1回だけ呼び出されるように、これを制御できる方法はありますか。
私の使用法
<rich:panelMenuItem label="Menu1" actionListener="#{testMenuMB.panelMenuClickedAjax}" rendered="#{testMenuMB.checkForRendering('RoleA,RoleB')}"></rich:panelMenuItem>
public boolean checkForRendering(String rolesString){
System.out.println("Roles-->"+rolesString+FacesContext.getCurrentInstance().getCurrentPhaseId());
boolean authorized = false;
String [] rolesArray = rolesString.split(",");
for (String string : rolesArray) {
if(string!=null && accesibleRolesMap.containsKey(string)){
authorized = true;
break;
}
}
return authorized;
}