Атрибут пространства имен ‹s:url› в Struts2

Мой код:

<s:url action="work-items_input" includeParams="get" var="wiLink"  namespace="">
    <s:param name="workItemVO.workItemId" value="'5'"></s:param>
</s:url>    
<s:a action="%{wiLink}" namespace="/myaccount"><s:property value="subject"/></s:a>

В моем приложении ContextRoot — «pmp». Здесь выше генерируется ссылка как

/pmp//pmp/myaccount/work-items_input.action?ajaxRequest=true&workItemVO.workItemId=5

выше мы видим, что контекстный путь идет дважды. /pmp//pmp... это неправильно. Как удалить один дополнительный контекстный путь?


person Abhishek Singh    schedule 31.08.2015    source источник
comment
Используйте ‹s:a› href с ‹s:url›.   -  person Aleksandr M    schedule 31.08.2015
comment
@rj4u: Пожалуйста, прекратите добавлять тег [java-ee], если вы не прочитали описание его тега и ничего не знаете о Java EE. Более того, прекратите вообще собирать репутацию, злоупотребляя предложенной системой редактирования и запуская полностью сломанную систему обзора этого сайта.   -  person BalusC    schedule 31.08.2015


Ответы (3)


Удалите атрибуты действия и пространства имен из тега <s:a> и используйте вместо них один из тегов <s:url> с атрибутом href:

<s:url action="work-items_input" includeParams="get" var="wiLink"  namespace="/myaccount">
    <s:param name="workItemVO.workItemId" value="'5'"></s:param>
</s:url>    
<s:a href="%{wiLink}"><s:property value="subject"/></s:a>

Этого должно быть достаточно.

person Andrea Ligios    schedule 31.08.2015
comment
Нет. Сейчас это /pmp/main//pmp/myaccount/work-items_input.action?ajaxRequest=true&amp;workItemVO.workItemId=5". Здесь main — это пространство имен текущего jsp-файла. - person Abhishek Singh; 31.08.2015
comment
@AleksandrM прав, я не заметил, что вы использовали action вместо href. Я отредактировал, попробуйте сейчас - person Andrea Ligios; 31.08.2015
comment
Ага. Ты прав. Я не заметил href. Спасибо, это сработало - person Abhishek Singh; 31.08.2015

Выше принятый ответ абсолютно правильный, без сомнения. Но мы можем использовать "includeContext="false" и в <s:url> в качестве альтернативы атрибуту action вместо href.

<s:url action="work-items_input" includeParams="get" var="wiLink"  namespace="/myaccount" includeContext="false">
    <s:param name="workItemVO.workItemId" value="'5'"></s:param>
</s:url>    
<s:a action="%{wiLink}" namespace=""><s:property value="subject"/></s:a>
person Abhishek Singh    schedule 31.08.2015

Это не работает из-за &, поэтому вы должны заменить все вхождения на &.

<td align="right">
   <s:url action="collectionSummary" var="csUrl">  
    <s:param name="collectionSummary.name">
        <s:property value="debtCase.origNameTxt"/></s:param>
    <s:param name="socSecNum">
        <s:property value="debtCase.socSecNum"/></s:param>
    <s:param name="debtCaseId"><s:property value="debtCase.ID"/></s:param>
    <s:param name="nomenu">Y</s:param>
   </s:url>
   <s:a    href="#" 
           onclick="window.open(clearURL('%{csUrl}'));" <------- 
           title="View Collection Summary" 
           class="screen_link">
   <s:text name="link.CollSumm"/></s:a>
</td>


function clearURL(element){
    return element.replace(new RegExp('&amp;', 'g'),"&");
}
person John    schedule 15.09.2017