Почему значение моего параметра отсутствует в сгенерированном URL?

Вот мой код:

<s:iterator value="ChapterTreeList" id="chapterTree">
  ...
    <s:url 
        id="deployChaptersUrl"
        action="ajaxDeployChapter"
        includeContext="false">
      <s:param 
               name="nodeId"
               value="%{#chapterTree.nodeId}"/>
    </s:url>

    <s:form
         id="deployChapters%{#chapterTree.nodeId}" 
         action="%{deployChapterUrl}"
         theme="simple"
         method="POST">
    </s:form>

    ...
</s:iterator>

Я ожидаю несколько форм, как эта ниже:

<form 
     id="deployChapters27623"
     name="deployChapters27623"
     action="/path/to/ajaxDeployChapter.action?nodeId=27623" <-- nodeId here
     method="POST">
</form>

Но вместо этого я получаю такие формы:

<form 
     id="deployChapters27623"
     name="deployChapters27623"
     action="/path/to/ajaxDeployChapter.action" <-- nodeId is missing here
     method="POST">
</form>

Struts 2.3.15.1

3 ответа

Решение

Вот как я решил свою проблему:

<s:form
     id="deployChapters%{#chapterTree.nodeId}" 
     action="%{deployChapterUrl}"
     theme="simple"
     method="POST">
     <s:hidden name="nodeId" value"%{#chapterTree.nodeId}" />
</s:form>

POST Метод HTTP отправляет параметры в тело запроса. Это разница между POST а также GET который поддерживает параметры в строке запроса.

Таким образом, вы просто не должны даже пытаться отправить строку запроса как часть POST. Это не будет работать в любом случае. Если вам нужно отправить nodeId у вас есть 2 варианта;

  1. отправить его как URL-путь: /path/to/ajaxDeployChapter.action/27623,
  2. создать скрытое поле формы nodeId и заселить его значение.

Я не использовал Struts раньше, однако я рискну предположить.

<s:form
     id="deployChapters%{#chapterTree.nodeId}" 
     action="%{deployChapterUrl}"
     theme="simple"
     method="POST">
</s:form>

Должно ли это быть так?

<s:form
     id="deployChapters%{#chapterTree.nodeId}" 
     action="%{deployChapterUrl}?%{#chapterTree.nodeId}"
     theme="simple"
     method="POST">
</s:form>
Другие вопросы по тегам