2

ユーザーのリスト ( 、 など) を含むテーブルを表示し、id指定nameしたユーザーを削除するボタンを最後の列に配置する必要があります。このようなもの:

############################
| ID | name | ... | button |   
| ID | name | ... | button |
############################

私は次のようなコードを書きました:

<form action="/Struts/DeleteUser.do" name="myForm" id="myForm" method="post">
    <display:table name="sessionScope.AllUsersForm.usersList">
       <display:column property="id" title="ID" />
       <display:column property="name" title="Name" />
       ...........
       <display:column title="Delete">
            <input type="submit" value="Delete user" />
       </display:column>
    </display:table>
<form>

では、Action クラスで押されたボタンを特定するにはどうすればよいでしょうか。ボタンを使用して隠しフィールドをセクションに配置し、その値を変更しようとしましたが、何も起こりませんでした。

更新しました:

私はすでに問題を解決しました。私はこれを使用しました:

<display:table name="sessionScope.AllUsersForm.usersList" 
  <%-- This ==> --%> id="item" <%-- <=== --%> >     
  ........
  <input type="submit"  value="Delete user" 
     onclick="document.getElementById('pressedButton').value = ${item.id}"/>

隠しフィールドを作成しました:

<input type="hidden" name="pressedButton" id="pressedButton" /> 
4

1 に答える 1

0

たとえば、ボタンに名前を付けることで簡単に実行できます

<input name="action" type="submit" value="Delete user" />

アクションに関連付けられたケース フォーム Bean 内の Bean で、プロパティを作成する必要があります。

private String action;
public void setAction(String action){
  this.action = action;
}
public String getAction(){
  return action;
}

Struts 1 は、commons beanutils を使用してフォーム Bean を設定しました。フォームを送信すると、フィールド値はセッターを介して入力されます。ボタン フィールドも例外ではありません。したがって、その値もactionプロパティに設定されます。次に、経由で確認できます

if (action != null && action.equals("Delete user")){
  System.out.println("Button is: "+action);
}  

ボタン イベントを識別して実行する最も自然な Struts 1 の方法は、メッセージ キー値をボタンと共にディスパッチすることです。例えば

<html:submit><bean:message key="button.delete"/></html:submit>

はメッセージ リソース キーです。ファイル"button.delete"にある必要がありますMessageResource.properties

button.delete = Delete user

アクションは実装LookupDispatchActionおよびオーバーライドする必要があります

@Override
public Map getKeyMethodMap() {
  Map<String, String> map = new HashMap<String, String>();
  map.put("button.delete", "delete");
  return map;
}

その後、アクションが実行されると、 で指定されたメソッドにディスパッチされますmap。この例では、メソッドdelete.

于 2013-06-15T19:49:06.707 に答える