Как установить основной URL-адрес плитки в классе действий Struts?

Я использую распорки 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");           
}
}

файл конфигурации 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>

Спасибо


Вдохновленный принятым ответом, я пришел к следующему решению.

На странице, определенной в tile def, у меня есть следующее

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

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

В классе действий (потому что я был ленив) у меня следующие

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
2 148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы захотите изучить поддержку плиток для классов контроллеров. Запись определения плиток будет выглядеть примерно так:

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

    }
}

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

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

Другие вопросы по теме