action
属性が<form
タグで使用されていると仮定します。その後、建設
<form name="MyAction.action" action="upload?id=<%=request.getParameter("id")%>&name=<%=request.getParameter("name")%>&age=<%=request.getParameter("age")%>&num=<%=request.getParameter("num")%>" method="POST">
現在のコンテキストで動作するはずです。ただし、エラーメッセージが表示された場合(タグが使用されている場合Exception Name: org.apache.jasper.JasperException: equal symbol expected
に発生し<s:form
ます。したがって、このURLをaction属性で使用することはできません。この属性には、アクションの検索に使用されるプレーンなアクション名が含まれている必要があります。
「パラメータをクエリ文字列として設定するにはどうすればよいですか?」
<s:param
実はタグでやってます。たとえば、ハイパーリンクを使用する場合
<s:a action="MyAction">
<s:param name="id" value="%{id}"/>
<s:param name="name" value="%{name}"/>
</s:a>
ただし、この<s:form
回答で説明されているような特別な構文を適用し、アクションでこれらのパラメーターを取得したい場合を除いて、この構造はタグでは機能しません。
String quesyString = request.getQueryString();
この文字列は空であってはなりません。
ただし、このユースケースが適用されることはめったにありません。そのような方法でパラメータを取得する理由がない場合は、代わりに、常に<s:hidden
フィールドを使用してパラメータの値を含めることができます。例えば
<s:form action="MyAction" method="POST">
<s:hidden name="id" value="%{id}"/>
<s:hidden name="name" value="%{name}"/>
</s:form>
これらの値はパラメーターとして渡され、params
インターセプターが機能した後にアクション属性を初期化します。このパラメータは、リクエストから直接取得することもできます。
Map<String, String[]> params = (Map<String, String[]>)request.getParameterMap();
ただし、アクションでこれを行うためのより便利な方法は、を実装することParameterAware
です。