3

ここでもう一度s2の質問がありますが、私はs2の初心者であり、例を見つけるのに苦労しました。

ユーザーがスタートページに入るときに提供されるログインに依存するメニューサービスを構築しています。ログインが完了したら、次のようにしてユーザーオブジェクトをセッションに保存します。

@Override
public String intercept(ActionInvocation invocation) throws Exception {
....
         
// verifica se o parametro do CPF veio no get e tenta logar o usuario
if (!StringUtils.isBlank(request.getParameter(USER_CPF_REQUEST))) {

if ( doLogin(request, session) ) {
   return Action.SUCCESS;
}

次に、doLoginメソッド

Usuario usuario = getServico().buscar( Long.valueOf(cpf) );
//Caso o usuário exista, guarda na session
if (usuario != null){
    session.setAttribute(USER_HANDLE, usuario);
    return true;
}

ここで問題が発生します。ApplicationContext.xmlの次のxml部分によってMenuActionにMenuBeanが挿入されています

<bean id="menuService" class="br.com.autenticis.renacon.ejb.MenuBean" />

    <bean id="menuAction" scope="prototype" class="br.com.autenticis.renacon.actions.MenuAction">
        <constructor-arg ref="menuService" />
    </bean>

そして、menuActionは次のように宣言されています。

public class MenuAction extends ActionSupport implements Preparable, SessionAware

そうすることで、私はプライベートメンバーとのセッションセットを実装する必要があります

private Map<String, Object> session;
....
@Override
public void setSession(Map<String, Object> session) {
   this.session = session;
}

以下のすべてのメソッドの失敗部分であるセッションオブジェクトは、デバッグ時にnullになります。

    public String execute() {
            if ( session.containsKey( LoginInterceptor.USER_HANDLE) ){
                Usuario u = (Usuario) session.get( LoginInterceptor.USER_HANDLE);
                setMenu( servico.getMenuPerfil( u.getPerfil() ) );
                return Action.SUCCESS;
            }
            
            return input();
        }

誰かが理由を知っていますか?またはそれを実装する方法は?上記のコードを見ると、ログオンしているユーザーからの「Perfil」が必要です。セッションにユーザーオブジェクトへのキーが含まれている場合は、それを取得し、perfilを使用してセッターを介してメニューにデータを入力し、それ以外の場合はSUCESSを返します。ログイン画面につながるINPUTを返します。

4

1 に答える 1

3

いくつかの私たちの後、私はなんとかエラーを発見することができました。プログラムではなくstruts.xmlにあるので、アプリケーションのカスタムスタックを作成しました。

<!-- stack seguro --> 
<!-- 
<interceptor-stack name="defaultLoginStack"> 
<interceptor-ref name="logger" /> 
<interceptor-ref name="params" /> 
<interceptor-ref name="login" /> 
<interceptor-ref name="prepare" /> 
<interceptor-ref name="chain" /> 
<interceptor-ref name="modelDriven" /> 
<interceptor-ref name="modelDriven" /> 
<interceptor-ref name="fileUpload" /> 
<interceptor-ref name="staticParams" /> 
<interceptor-ref name="params" /> 
<interceptor-ref name="conversionError" /> 
<interceptor-ref name="validation" /> 
<interceptor-ref name="workflow" /> 
</interceptor-stack> 
--> 

そして、defaultLoginStackがに変更されたセッション関連のアイテムを含めるのをやや忘れました

<interceptor-stack name="defaultLoginStack"> 
<interceptor-ref name="login" /> 
<interceptor-ref name="defaultStack" /> 
</interceptor-stack>  

正しく注入されたセッションを使用できるようになりました。

于 2009-04-15T20:00:29.207 に答える