2017-07-10 13 views
0

基本的には、コントローラと2つの異なるアカウントタイプがあります。ユーザーのタイプに応じてビューを「adminDashboard.jsp」または「userDashboard.jsp」として表示し、これらのビューのそれぞれに「user」というモデル属性を渡しますが、異なるクラスを持つ別のオブジェクトがビューが表示されます。現在のところ、スイッチケースに埋め込まれていても、私のコードは、「アクティブ化」されたスイッチに属しているものではなく、最初に起こるものだけを読み込みます。同じ名前の異なる2つのモデル属性は、それぞれ異なるビューに渡されますが、同じコントローラ内にあります

にHomeController:

@Controller 
@RequestMapping(value = "/dashboard") 
public ModelAndView showDashboard(String userGroup) { 
    switch(userGroup) { 
    case "admin": { 
     ModelAndView("adminDashboard", "user", adminObject); 
    } 
    case "user": { 
     ModelAndView("userDashboard", "user", userObject); 
    } 
    } 
} 

adminDashboard.jsp

<html> 
<head> 
    ... 
</head> 
<body> 
    ${user.adminId} <!-- reads this correctly --> 
    ${user.userId} <!-- does not read this, which is good. --> 
</body> 
</html> 

userDashboard.jsp

<html> 
<head> 
    ... 
</head> 
<body> 
    ${user.adminId} <!-- reads this, which it should not --> 
    ${user.userId} <!-- does not read this, but it should --> 
</body> 
</html> 

adminユーザーモデル属性がまだでも、渡されている理由を誰かが私に説明することができます技術的にはコードはそのスイッチのケースに入ってはいけません。私も何をしようとしていますか?もしそうなら、例は何でしょうか?

+0

スイッチケースはissues.Itが '含ま壊れません持っているとし;'あなたをif elseブロックで同じロジックを試すことができます。 –

+0

あなたが示唆したように私は試しましたが、userDashboardビューを返しても、$ {user} ELタグを使用するときにadminユーザーモデル属性が使用されます。モデル属性は、他のビューに関連付けられたModelAndViewオブジェクトでのみ宣言されるため、非常に困惑します。 –

答えて

0

代わりに、ユーザー・プロファイル・レベルのための2つのJSPページを維持するための、私はそうでない状態

<c:if test="${user.profileLevel=='admin'}"> 
    <c:out value="${user.adminId}" /> 
    </c:if> 

場合は、JSTLの使用を見ることをお勧めそして、あなたは、サブユーザーレベルにレンダリングするようにしたい場合は、することができます

<c:choose> 
    <c:when test="${user.profile=='partner'}"> 
     Partners with Us. 
    </c:when>  
    <c:otherwise> 
     Other Level. 
    </c:otherwise> 
</c:choose> 

は条件内でネストできます。

このシナリオでは、jspがアクセスされるパラメータを処理します。私の場合は、ユーザーレベルのページでadminIdにアクセスすることが最初から行われるべきではないので、これはより良いアプローチと言えます。

@Controller 
@RequestMapping(value = "/dashboard") 
public ModelAndView showDashboard(String userGroup) { 
    switch(userGroup) { 
    case "admin": { 
     ModelAndView("adminDashboard", "adminUser", adminObject); 
     break; 
    } 
    case "user": { 
     ModelAndView("userDashboard", "user", userObject); 
     break; 
    } 
    } 
} 

そして、それ以下のようにあなたのadminDashboard.jspのアクセスに:

+0

残念なことに、私の例はそれだけであり、この解決法は私を助けません。私がOPで概説したように、なぜ私がそれを行う必要があるのか​​についての約10以上の理由があります。そのほとんどは私の手から完全に外れています。私が質問した問題の解決策があるかどうか教えてください。 –

0
は、以下のように、あなたのコントローラを変更

<html> 
    <head> 
     ... 
    </head> 
    <body> 
     ${adminUser.adminId} <!-- reads like this --> 
    </body> 
    </html> 
+0

これは質問の条件を満たしていません。私はadminUserとuserを必要としませんが、単にuserです。私のメニューのナビゲーションはこれに1000000%依存していて、それは私の責任ではありません。私が聞いたことに合った解決策があれば教えてください。 –

関連する問題