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です。