1

Struts 2.3.16 を使用しています。

アクション URL を値スタックにプッシュするにはどうすればよいですか?

私はもう試した:

<s:push value="methodUrl">
  <s:url action="action" method="method" />
</s:push>

<s:push value="methodUrl">
  <s:url action="action" method="method" var="methodUrl" />
</s:push>

<s:push>
  <s:url action="action" method="method" var="methodUrl" />
</s:push>

上記のすべては、エラーをログに記録せずに失敗しますstruts.devMode=true. には値が必要なため、3 番目のオプションの失敗だけが本当に予想されていましたs:push

.js背景:次のように、選択タグとは別のファイルにある JavaScript 関数に URL を渡す必要があります。

<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{methodUrl}')" />

'<s:url action="action" method="method" />'関数がファイルで定義されている場合、JS 関数で使用できることはわかってい.jspますが、JavaScript が別のファイルにある場合は機能しません。

上記の段落を入力したときに、JSP で URL を に渡す JavaScript 関数を定義できることに気付きましたajaxFunction

ですから、私の質問は純粋に学術的なものです。

値スタックにアクセスs:pushする方法はありますか?s:url

4

2 に答える 2

0

肯定的な応答がないことから、s:push を使用して s:url を値スタックにプッシュすることはできないようです。Roman の応答は、私が探していたものとはまったく異なります。

Roman の回答と私自身の実験に基づいて、値スタックで URL を取得するには、s:url の var 属性を使用する必要があることは明らかです。URL がページに表示されないようにするには、JSP で JavaScript を使用する必要があります。たとえば、Roman の 2 番目のコード ブロックに基づいています。

<script type="text/javascript">
  function noNeedToExecute(){
    var dummy = '<s:url action="action" method="method" var="methodUrl" />';
  }
</script>

または、次のような CSS を使用する必要があります。

<style>
  .hidden {display: none;}
</style>
...
<span class=hidden>
  <s:url action="action" method="method" var="methodUrl" />
</span>

私は純粋な Struts の実装を望んでいましたが、失望に耐えなければならないことは明らかです。;-)

私が完全に間違っていたという事実を隠さないために、上記を残しています。私が行ったどのような間違った動きが<s:url ... var="varName" .../>、ページに URL を表示し、それを非表示にする必要があると信じるようになったのかわかりません。私は間違っていました。Roman C の時間を無駄にしてしまったことをお詫びします。

于 2014-04-25T16:59:38.003 に答える
0

タグvarの属性を使用すると、値が値スタックに入れられます。url

<s:url action="action" method="method" var="methodUrl" />
<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{#methodUrl}')" />

パラメータなしで関数を使用することもできます

<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction()" />
<script type="text/javascript">
  function ajaxFunction(){
    var methodUrl = '<s:property value="%{#methodUrl}"/>';
    // or even better
    var methodUrl2 = '<s:url action="action" method="method" var="methodUrl" />';
  }
</script>

わかりましpushた。値を値スタックに入れたい場合は、このタグを使用する必要がありますが、値はオブジェクトへの参照である必要があります。これは、文字列 url に変換され、パラメーターとして JS 関数に渡されます。

<s:url action="action" method="method" var="methodUrl" />
<s:push value="%{#methodUrl}">
  <s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{top}')" />
  <script type="text/javascript">
    function ajaxFunction(url){
      alert(url);
    }
  </script>
</s:push>
于 2014-04-22T17:07:25.137 に答える