Поместите ссылку href в тег набора Struts2 - PullRequest
0 голосов
/ 23 октября 2011

Я хочу поместить метку привязки в переменную Struts2, которую затем можно отобразить в различных точках JSP. Таким образом, я могу избежать дублирования сложных операторов if / then, которые используются для построения различных форм тега href.

Для этого я использую тег Struts 's: set'.

Проблема в том, что Struts преобразует символы '<' в htmlentities, и когда отображается страница, я вижу реальный отображаемый тег "a href = someURL", а не рабочую ссылку. </p>

Если я добавлю аргумент escape = true к s: установить, что он делает то же самое, только он отображает htmlentities для тегов '<' и '>'.

Как поместить допустимый тег привязки в переменную Struts2, а затем отобразить его в качестве рабочей ссылки?

Вот что я делаю:

<s:set name="composerName">

<s:property value="'a href=%{viewRecordURL}>'" escape="false"/>

<s:property value="#composer.title" />

<s:property value="#composer.firstName" />

<s:property value="#composer.lastName" />

<s:property value="'</a>'" escape="false" />

</s:set>

Ответы [ 5 ]

1 голос
/ 23 октября 2011

Используйте s:url для создания действительного URL-адреса, а затем используйте его в s:a для создания ссылки.

Для более подробной информации см. Ссылку ниже:

http://struts.apache.org/2.1.8/docs/a.html

0 голосов
/ 12 апреля 2019

это простой способ установить ссылку в Struts2 // добавить действие Struts2 в href

<s:a href="forgetPasswordPage.action" >Forget Password</s:a>
0 голосов
/ 27 января 2015

Мы можем использовать URL-тег для создания URL, как указано ниже

<s:url id="hLink" action="yourStrutsActionName">
   <s:param name="propertyName" value="%{propertyName}" />
</s:url>
<td><s:a href="%{hLink}"><s:property value="%{propertyName}"/></s:a></td> 
0 голосов
/ 23 октября 2011

Я отвечу на свой вопрос. Возможно, у кого-то есть более элегантное решение. Еще раз, мы пытаемся получить как тег привязки, так и URL в переменную s: set. Проблем было две: 1) получение s: установить обработку строки тега как буквальной строки, а не объекта (который он хочет получить из ActionContext или где-то еще), и 2) отключение экранирования, чтобы текст строки привязки тег не преобразуется в htmlentities, как '& lt;'.

Для 1 я устанавливаю переменную равной null, но предоставляю аргумент по умолчанию, который s: property всегда обрабатывает как буквенную строку.

Для # 2 это просто вопрос использования escape = "false" в нужных местах.

К сожалению, строка должна состоять из отдельных битов свойства s: но что вы можете сделать?

<s:set name="composerName" >
    <s:property value="" default="<a href=" escape="false"/> 
    <s:property value="" default="'" />
    <s:property value="%{viewRecordURL}" escape="true"/>
    <s:property value="" default="'>" escape="false" />
    <s:property value="#composer.title" />
    <s:property value="#composer.firstName" />
    <s:property value="#composer.lastName" />
    <s:property value="" default="</a>" escape="false"/>
</s:set>

Я еще не тестировал его с символами UTF-8 или потенциально проблемными символами, такими как '&', апостроф или одинарные кавычки в части #composer.

0 голосов
/ 23 октября 2011

Это не то, как вы хотите построить это - у вас есть две разные вещи, URL и текстовая строка этого URL.URL у вас уже есть.Используйте только <s:set> для текста ссылки.

Если вам действительно нужно, вы можете заключить это в пользовательский тег на основе JSP, но я бы не стал беспокоиться.

...