1

アプリケーションはこれよりも複雑なので、コードの関連部分を抽出しようとしました。

selectItemForOrder()Webアプリケーションのフローは、メソッドを呼び出して実行中のショップをリストから選択することです。

実行中のショップのIDが正しく設定されている。

finishOrder()しかし、メソッドを呼び出すfinishOrderボタンを押すと、取得しNullPointerExceptionます。finishOrderボタンを押すと、コントローラークラスが破棄され、新しいコントローラーが作成されると思われるので、データを送信するにはどうすればよいですか。

IDをデータベースに保存することはオプションではありません(それは私が修正しようとしている問題です)。

これが些細な質問である場合は申し訳ありません。SpringMVCは初めてです。

public class MyController {

private Integer executingShopId;

public View selectItemForOrder() {

setExecutingShopId(1);
return View;
}

public View finishOrder() {

System.out.println("Shop id: " + getExecutingShopId());
computeOrder(executingShopId);
return View;
}
}
4

2 に答える 2

1

はい、次のような非表示フィールドを使用して、jspページでidの値を維持することができます。

<form:hidden path="id"/>
于 2013-03-12T08:38:50.077 に答える
1

コントローラの設定を変更しましたか?デフォルトの場合、コントローラーはシングルトンモードであるため、コードによって問題が発生することはありません。コントローラがプロトタイプモードであるという設定を変更すると、問題が発生します。確かに値をhiddenに保存できますが、より理にかなっていて安全であるため、セッションに値を保存することをお勧めします。

public View selectItemForOrder(HttpSession session) {

session.setAttribute(XXXX,YYY);
return View;
}

public View finishOrder(HttpSession session) {
Session.getAttribute(XXXX)
System.out.println("Shop id: " + getExecutingShopId());
computeOrder(executingShopId);
return View;
}
于 2013-03-12T08:53:47.647 に答える