Как установить URL-адрес тела плитки в классе действий Struts? - PullRequest
0 голосов
/ 21 ноября 2008

Я использую стойки 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>

Я хочу иметь возможность установить значение параметра body в моем классе действий Java. Что я получу от ActionMapping или ActionForm, чтобы сделать это?

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

файл конфигурации стойки выглядит как

  <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");

И это сработало.

1 Ответ

0 голосов
/ 05 июня 2009

Возможно, вы захотите изучить поддержку плиток для классов контроллеров. Запись 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 реализует метод execute (), например:

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");
      }

    }
}

Приведенный выше пример может быть выполнен непосредственно в ваших действиях без использования TilesController, но TilesController может помочь сделать ваши Действия менее беспорядочными. Общая цель, независимо от метода, состоит в параметризации NM_Landing.jsp и последующем изменении того, какой jsp используется атрибут «body» определения. Например, NM_landing.jsp может быть не более чем вызовом типа «1007»

<c:import url="${nameOfJSPToImport}" />
...