0

タイルでストラット 1.1 を使用しています。

次のような定義のタイルがあります

<definition name="cnmp.body.index" extends="cnmp.mainLayout" >
  <put name="title"  value="CNM Portal" />
  <put name="bodytitle"  value="Home" />
  <put name="body"   value="/00-CNM_Landing.jsp" />
</definition>

Java Action クラスで body パラメーターの値を設定できるようにしたいと考えています。これを行うには、ActionMapping または ActionForm から何を取得しますか?

public class TileForwardAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm arg1,
        HttpServletRequest arg2, HttpServletResponse arg3) throws Exception
{
    return mapping.findForward("theTile");           
}
}

struts構成ファイルは次のようになります

  <action-mappings>

  <action   path = "/index"
            type = "com.bellsouth.snt.cnmp.ui.action.TileForwardAction"
            scope = "request"
            input = "cnmp.body.index"
            parameter= "theTile"
    >    
      <forward name="theTile" path="cnmp.body.index"/>       
  </action>

ありがとうございました


受け入れられた答えに触発されて、次の解決策を思いつきました

タイル定義で定義されたページには、次のものがあります

<% String destAttr=(String)request.getAttribute("dest"); %>

<jsp:include page="<%=destAttr%>" flush="true" />

アクションクラスでは(私は怠け者だったので)、次のものがあります

    request.setAttribute("dest", "landingB.jsp");

そして、それはうまくいきました。

4

1 に答える 1

0

コントローラー クラスのタイル サポートを調べることができます。tiles def エントリは次のようになります。

<definition 
  name="cnmp.body.index" 
  extends="cnmp.mainLayout"
  controllerClass="org.yourpackage.YourControllerClass">
  <put name="title"  value="CNM Portal" />
  <put name="bodytitle"  value="Home" />
  <put name="body"   value="/00-CNM_Landing.jsp" />
</definition>

次に、YourControllerClass は次のような perform() メソッドを実装します。

public class YourControllerClasss implements Controller
    public void perform(ComponentContext context,
      HttpServletRequest request,
      HttpServletResponse response,
      ServletContext servletContext)
      throws ServletException, IOException {

      //some logic to determine what the 'body' should be

      if (service.isUp()){
        request.setAttribute("nameOfJSPToImport", "/jsps/import-me.jsp");
      }else{
        request.setAttribute("nameOfJSPToImport", "/jsps/import-me-instead.jsp");
      }

    }
}

上記の例は、TilesControllers を使用せずにアクションで直接実行できますが、TilesController を使用すると、アクションをすっきりさせることができます。手法に関係なく、全体的な目標は、NM_Landing.jsp をパラメータ化してから、定義の「ボディ」属性が使用している JSP を実際に変更することです。たとえば、NM_landing.jsp は、次のようなインクルード コールにすぎない可能性があります。

<c:import url="${nameOfJSPToImport}" />
于 2009-06-05T00:50:07.497 に答える