Якорный тег Struts2 не включает contextPath

%{#request.contextPath} не работает внутри тега s: в Struts2. (Struts 2.2.1, чтобы быть конкретным.) Есть ли способ заставить его работать? Это работает в других тегах Struts2.

Вот две строки в файле JSP в проекте Struts 2, путь к контексту которого - "/website":

<s:a href="%{#request.contextPath}/clickme" theme="simple">Click here.</s:a>
<s:form method="post" action="%{#request.contextPath}/submitme" theme="simple"></s:form>

И вот вывод:

<a href="/clickme">Click here.</a>
<form id="submitme" name="submitme" action="/websites/submitme" method="post"></form>

Обратите внимание, что контекстный путь оставлен вне привязки, но включен в форму.

PS я не могу использовать ${#pageContext.request.contextPath} здесь, потому что ${} не допускается в тегах Struts2. Кроме того, я пытаюсь быть последовательным. И я тоже стараюсь вообще избегать ${} так как это не автоматически выход из выхода.

Спасибо!

2 ответа

Решение

Это должно работать:

<s:set id="contextPath"  value="#request.get('javax.servlet.forward.context_path')" />
<s:a href="%{contextPath}/clickme" theme="simple">Click here.</s:a>

Тем не менее, вы не должны делать это. Когда вам нужен URL, используйте <s:url> тег:

<%-- Without specifying an action --%>
<s:url id="myUrl" value="clickme" />
<s:a href="%{myUrl}" theme="simple">Click here.</s:a>

<%-- With an action --%>
<s:url id="myUrl" action="clickme" />
<s:a href="%{myUrl}" theme="simple">Click here.</s:a>

Кстати, вам не нужен контекстный путь для атрибута действия формы:

<s:form method="post" action="submitme" theme="simple"></s:form>

Поддерживает ли Struts 2 EL?

Ты можешь использовать ${request.contextPath} если это так....

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