0

私のアプリケーションには、セッション スコープ内にある同じ Bean クラスにアクセスする 5 つのポートレットがあります。私の問題は、ポートレットを開くたびにマネージド Bean が初期化されることです。マネージド Bean は、セッションで 1 回初期化する必要があります。私の場合、Beanの初期化は5回です。その問題の根本的な原因は何か教えてもらえますか?

ここに私の豆があります:

@ManagedBean(name="userManagementBean")
@SessionScoped
public class UserManagementBean {


public UserManagementBean() {

    System.out.println("In getter setter bean");

    sName=userManagementHelper.findScreenName();  

    directReport=new DualListModel<String>();
    addUserToGroupDual=new DualListModel<String>();
    addUserToGroupDual.getSource().clear();
    addUserToGroupDual.getTarget().clear();
            ............
4

2 に答える 2

0

JSR286 にはユーザー セッション ベースのスコープがありますが、ポータル サーバーが JSF のカスタム スコープとして実装されているかどうかによって異なります。

Websphere ポータル 8.x がこれをサポートしていることは確かです。

Websphere portal 8.x では、マネージド Bean を次のように指定できます。

@ManagedBean(name="userManagementBean")
@CustomScoped("#{portletApplicationSessionScope}")
public class UserManagementBean {

...

}

ポータル サーバーのドキュメントを調べて、それがサポートされているかどうかを確認してください。

liferay を使用していることを更新したので、Apache JSF ポートレット ブリッジを使用できます。

Application Session Scope を EL として公開します。

ポートレット A のアプリケーション スコープに追加する

PortletSession session = request.getPortletSession();
session.setAttribute("name",name.getValue().toString(),PortletSession.APPLICATION_SCOPE);

ポートレットBで使用

PortletSession session = request.getPortletSession();
String value = session.getAttribute("name", PortletSession.APPLICATION_SCOPE).toString();

あなたの xhtml 、

<h:inputText id="itName" 
                required="true" 
                value="#{httpSessionScope.name}"/>
于 2013-04-10T15:05:05.643 に答える