2016-12-20 2 views
2

У меня есть глобальный результат, который возвращает ошибку 404 пользователю. У меня также есть действие по умолчанию, которое я хотел бы сделать то же самое.Как удалить дублирующее тело результата в struts2

Я бы хотел, чтобы мой успех привел к действию по умолчанию для расширения моего глобального результата notfound, но я не вижу, как это сделать. Я что-то упускаю?

<default-action-ref name="notfound" /> 

    <global-results> 
     <result name="notfound" type="httpheader"> 
      <param name="error">404</param> 
      <param name="errorMessage">Oh No You Didn't</param> 
     </result> 
    </global-results> 

    <global-exception-mappings> 
     <exception-mapping exception="com.me.s2ui.AccessException" result="notfound" /> 
    </global-exception-mappings> 

    <action name="notfound"> 
     <result type="httpheader"> 
      <param name="error">404</param> 
      <param name="errorMessage">Oh No You Didn't</param> 
     </result> 
    </action> 
+0

Когда/Как вы используете это действие? Почему бы просто не вернуть «notfound» в результате действия? –

+1

@AleksandrM У меня есть notfound, настроенный как действие по умолчанию, чтобы поймать любой случайный url, входящий в мое приложение. У меня нет кода реализации, с помощью которого можно вернуть неподтвержденный результат. Я просто использую поведение по умолчанию. – Aaron

+1

No * прямой * способ. Но вы можете просто создать простой класс действий и вернуть свой результат из него. Вы также можете использовать неизвестные обработчики для обработки неизвестных действий. –

ответ

1

Как заявил @Aleksandr M и @Roman C в комментариях, что я хотел было не возможно. После публикации вопроса я понял, что мне нужно войти в действие по умолчанию, поэтому я закончил писать класс.

@org.apache.struts2.convention.annotation.Action("notfound") 
public class DefaultAction implements Action, ServletRequestAware 
{ 
private static Logger logger = LogManager.getLogger(DefaultAction.class); 
private HttpServletRequest request; 

@Override 
public String execute() throws Exception 
{ 
    logger.warn("Unknown target "+request.getRequestURI()); 
    return "securityerror"; 
} 

@Override 
public void setServletRequest(HttpServletRequest req) 
{ 
    this.request = req; 
} 
} 

Struts.xml

<default-action-ref name="notfound" /> 

    <global-results> 
     <result name="intLogin" type="redirect">${#request.loginUrl}</result> 
     <result name="input" type="tiles">user</result> 
     <result name="securityerror" type="httpheader"> 
      <param name="error">404</param> 
      <param name="errorMessage">Oh No You Didn't</param> 
     </result> 
    </global-results> 

    <global-exception-mappings> 
     <exception-mapping exception="com.me.s2ui.AccessException" result="securityerror" /> 
    </global-exception-mappings> 
+0

:) Я почти набрал «возможно, вы хотите сделать некоторые записи» также и в моем предыдущем комментарии. +1 для ответа на свой вопрос и принятия его. –

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