Почему значение моего параметра отсутствует в сгенерированном 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 варианта;
- отправить его как URL-путь:
/path/to/ajaxDeployChapter.action/27623
, - создать скрытое поле формы
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>