2015-02-26 4 views
2

Я пытаюсь переместить функциональность перенаправления из скриптлета в класс Sightly. То, что я сделал до сих пор:Реализация перенаправления

package apps.myproject.components.page.generic; 

import java.io.IOException; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.jsp.PageContext; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import com.day.cq.wcm.foundation.ELEvaluator; 
import com.adobe.cq.sightly.WCMUse; 

public class PageComponent extends WCMUse { 

    private static final Logger log = LoggerFactory.getLogger(PageComponent.class); 

    public void activate() throws Exception { 

    } 

    public void redirect() throws IOException{ 
     String location = getProperties().get("redirectTarget", ""); 

     // resolve variables in path 
     //where I can find PageContext Object? 
     //location = ELEvaluator.evaluate(location, getRequest(), new PageContext()); 

     boolean wcmModeIsDisabled = getWcmMode().isDisabled(); 
     boolean wcmModeIsPreview = getWcmMode().isPreview(); 
     if ((location.length() > 0) && ((wcmModeIsDisabled) || (wcmModeIsPreview))) { 
      // check for recursion 
      if (getCurrentPage() != null && !location.equals(getCurrentPage().getPath()) && location.length() > 0) { 
       // check for absolute path 
       final int protocolIndex = location.indexOf(":/"); 
       final int queryIndex = location.indexOf('?'); 
       final String redirectPath; 
       if (protocolIndex > -1 && (queryIndex == -1 || queryIndex > protocolIndex)) { 
        redirectPath = location; 
       } else { 
        redirectPath = getResourceResolver().map(getRequest(), location) + ".html"; 
       } 
       getResponse().sendRedirect(redirectPath); 
      } else { 
       getResponse().sendError(HttpServletResponse.SC_NOT_FOUND); 
      } 
     } 
    } 
} 

Проблема заключается в том, что я не знаю, где я должен получить объект PageContext для ELEvaluator.evaluate() метод с. Передача null бросает меня NullPointerException, проходя new PageContext() бросает

java.lang.Error: Unresolved compilation problem: 
    Cannot instantiate the type PageContext 

Как использовать ELEvaluator или что-то подобное в классе красивый? Есть идеи?

+0

возможно дубликат [Что такое исключение нулевого указателя, и как это исправить?] (HTTP : //stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

+3

@AshleyMedway Нет, это определенно не дубликат. Мой вопрос: как я могу использовать ELEvaluator.evaluate() в Sightly классе, в то время как у меня нет объекта pageContext? Необязательно: есть что-то похожее на ELEvaluator в Sightly, что позволяет избежать использования pageContext? Взгляните на последнее предложение моего вопроса. – kmb

+0

Исключения всех нулевых указателей являются дубликатами ... –

ответ

0

Не уверен, отвечает ли он на ваш вопрос, но для меня ELEvaluator.evaluate - это оценка потенциального выражения, хранящегося в вашем redirectTarget. Если вы не ищете край, вы можете просто игнорировать всю строку и сосредоточиться на перенаправлении.

  • прочитать свойство
  • валидацию и экстернализации
  • response.sendRedirect (ссылка)
+0

Да, представленный код работает нормально, он перенаправляет меня в нужное место, но меня все еще беспокоит недостающая функциональность ELEvaluator. Спасибо за ваш ответ. – kmb

 Смежные вопросы

  • Нет связанных вопросов^_^