0

jsp と struts2 を使用しており、次のシナリオがあります。

<s:form>
<s:hidden name="empId" value="123"/>
<s:textfield name="employee.name"/>
<s:submit action="save"/>
</s:form>

このフォームが送信されると、"save" メソッドの前に OGNL 式の employee.name (getEmployee().setName() と同等) が実行されます。また、「empId」の値は getEmployee() メソッド内では使用できません。「empId」の値は、「save」メソッド内でのみ使用できます。getEmployee()内で「empId」の値を取得することは可能ですか?

以下は、私の Action クラスのコードです。

public String save() {
  //empId is available here
  return SUCCESS;
}

public Employee getEmployee(){
  if (employee == null){
    //empId is not available here
    employee = employeeService.get(empId);
  }
  return employee;
}
4

2 に答える 2

0

私は理解していないので、明確にするために、getEmployee() を呼び出したいのですが、メソッドで従業員 ID を取得する方法がわかりませんか?

従業員のテーブルがあるとしましょう。また、表に次の詳細が示されていると仮定します。

  • 従業員名
  • 従業員ID

各行にもリンクがあり、クリックするとその従業員の詳細画面に移動するとします。従業員 ID を出力したので、必要な get パラメータを使用して html アンカー要素を作成することもできます。これにより、アクションが呼び出されたときに必要なものが得られます。<s:a>タグと一緒にタグを使用すると、<s:param>これが簡単になります。

struts2アンカータグとプロパティタグの使用方法の例については、こちらのTiles2 Struts Switch Localeの回答を参照してください。この例では静的プロパティを使用していますが、パラメーター タグの value 属性を id 変数に置き換えるだけです。

詳細については、 http://struts.apache.org/2.2.1.1/docs/a.htmlを参照してください。

編集:あなたの編集の前に私はかなり離れていたことがわかりました。

getEmployee(int id) メソッドを作成するのが最も簡単だと思います。次に、隠しフィールドの値も取り除くことができます。その後、それはまっすぐなはずです...

あなたのjspは大まかに次のようになります(テストされていません):

<s:form>
   <s:textfield name="%{employee[123].name}"/>
   <s:submit action="save"/>
</s:form>
于 2011-03-09T20:48:56.257 に答える
0

まず、フィールドのセッターがあり(表示されていませempIdん)、パラメーターが設定される順序が任意であることが問題であると仮定します。

ParametersInterceptor最上位のプロパティを最初に設定するように強制するオプションがあります。orderedこれを有効にするには、インターセプター スタックをカスタマイズして、プロパティ セットでパラメーター インターセプターを定義します。

<interceptor-ref name="params">
    <param name="ordered">true</param>
</interceptor-ref>

次に、アクション クラスで、setEmpIdメソッドを次のように変更します。

public void setEmpId(Integer empId) { // or whatever type it is
    this.empId = empId;
    employee = employeeService.get(empId);
}

セッター アプローチの代わりに、Employeeクラスの型コンバーターを作成し、フォームを次のように変更することもできます。

<s:form>
    <s:hidden name="employee" value="123"/>
    <s:textfield name="employee.name"/>
    <s:submit action="save"/>
</s:form>
于 2011-03-10T03:14:55.650 に答える