1

入力すると: http://localhost:8080/sys_manager/admin/sys/resource/update/1009 このメソッドに入ることができますが、id 値は null です:

    @RequestMapping(value = "update/{id}", method = RequestMethod.GET)
    public String showUpdateForm(@PathVariable("id") ID id, Model model) {
        M m = baseService.findOne(id);
        if (permissionList != null) {
            this.permissionList.assertHasUpdatePermission();
        }
        setCommonData(model);
        model.addAttribute(Constants.OP_NAME, "修改");
        model.addAttribute("m", m);
        return viewName("editForm");
    }

1枚の写真は何千もの言葉を超えています。スナップショットは次のとおりです

4

3 に答える 3

3

みんなありがとう、私はこの問題を修正しました。それはオーバーライドによるものです。スーパーメソッド

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") ID id, Model model) {
    M m = baseService.findOne(id);
    if (permissionList != null) {
        this.permissionList.assertHasUpdatePermission();
    }
    setCommonData(model);
    model.addAttribute(Constants.OP_NAME, "修改");
    model.addAttribute("m", m);
    return viewName("editForm");
}

このサブクラスのメソッドは次のとおりです。

@Override
public String showUpdateForm(@PathVariable("id") Long id, Model model) {
    return super.showUpdateForm(id, model);
}

子の「showUpdateForm」にアクセスします(子のメソッドには@RequestMappingがありませんが)。私の間違いは、子のメソッドに @PathVariable を追加しないことです。

于 2015-04-10T10:36:36.870 に答える
1

最も簡単な解決策は、コントローラーのアクションを次のように変更することです

public String showUpdateForm(@PathVariable("id") Integer id, Model model) {
....

本当に使用したい場合は、カスタム クラス オブジェクトをPathVariable. 次に、以下のようにカスタム エディターをコントローラーに登録する必要があります。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(ID.class, new PropertyEditorSupport() {
        @Override
        public String getAsText() {
            return ((ID) this.getValue()).toString();
        }

        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            setValue(new ID(text));
        }
    });
}

また、選択に応じて、そのクラス内またはこの initBinder 内で解析されたテキスト値を格納する変数を追加する必要があることにも注意してください。

于 2015-04-09T16:08:21.747 に答える
0

Spring Data JPA DomainClassConverter を使用します。そのようにして、findOne ルックアップを保存します。

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") M m, Model model) {

http://docs.spring.io/spring-data/jpa/docs/1.8.0.RELEASE/reference/html/#_domainclassconverter

于 2015-04-09T18:52:54.327 に答える