6

<s:url ..タグを使用してトークン インターセプターを実装しようとしましたが、最初のクリックでエラーが表示されます。すなわち

フォームは既に処理されているか、トークンが提供されていません。もう一度お試しください。

このインターセプターを実装したいのは、ユーザーがすでに行を削除してページをもう一度更新した場合、同じアクションをもう一度実行してはならないからです。

<s:url id="linkdelete" action="DeleteLatestUpload.action" namespace="/admin/insecure/upload">
     <s:param name="latestUploadId" value="latestUploadId"></s:param>
     <s:token name="token"></s:token>
</s:url> 
<a href='<s:property value="#linkdelete"/>' style="color: white;text-decoration:  none;" class="delbuttonlink">Clear current Uploads</a>

そして私のstruts.xml

 <action name="DeleteLatestUpload" class="v.esoft.actions.UploadExcel" method="deleteUploads">                   
     <interceptor-ref name="token"></interceptor-ref>
     <interceptor-ref name="basicStack"></interceptor-ref>  
     <result name="success" type="tiles"> uploadforward</result>
     <result name="invalid.token" type="tiles">uploadforward </result>
 </action>
            
4

2 に答える 2

7

s:token タグは、一意のトークンを含む隠し要素を配置するだけです。

フォームを送信する必要があるため、url でトークンを使用する必要はありません。パラメータとしてトークンを渡したい場合は、s:paramタグを使用する必要があります。

パラメータを定義する

  private String token;

  public String getToken() {
    return token;
  }

  public void setToken(String token) {
    this.token = token;
  }

  public String execute() throws Exception {
    Map<String, Object> context = ActionContext.getContext().getValueStack().getContext();
    Object myToken = context.get("token");
    if (myToken == null) {
        myToken = TokenHelper.setToken("token");
        context.put("token", myToken);
    }
    token = myToken.toString();
    return SUCCESS;
  }

JSPで

<s:url var="linkdelete" namespace="/admin/insecure/upload" action="DeleteLatestUpload" ><s:param name="struts.token.name" value="%{'token'}"/><s:param name="token" value="%{token}"/></s:url>
于 2013-09-16T08:03:30.693 に答える
5

URL でトークンを使用する最も簡単な方法は、<s:token/>タグを使用してトークン値をセッションに設定し、<s:param>タグで取得することです。

<s:token/>

<s:url var="..." action="...">
  <s:param name="struts.token.name" value="'token'"/>
  <s:param name="token" value="#session['struts.tokens.token']"/>
</s:url>
于 2013-09-16T19:23:39.027 に答える