Struts2는 ModelDriven 대상 값을 사용하여 프론트 데스크톱에 비어 있습니까?

우리는 Struts2의 인터페이스 모델 드라이브를 사용하여 대상의 봉인과 프론트 데스크톱 데이터의 상호작용을 실현했다. 이때 get모델 방법을 실현해야 한다. 즉,
@Override
    public User getModel() {
        if(user == null){
            user = new User();
        }
                                                                                                                                                            
        return user;
    }

그러나 우리는 사용자를 얻는 방법을 스스로 정했다.
public String getUserById(){
        user = userService.getUserById(user.getUid());
        if(user == null){
            msg = " !";
            return "fail";
        }
        System.out.println(user.getUname());
        return "modify";
    }

우리 페이지에 상대적인 대상 속성 값이 있으면 debug 탭을 통해 보십시오. 모두null입니까?왜 이래?
사실 이것은 Struts2가 사용하는 값 창고(Value Stack) 메커니즘과 관련이 있기 때문이다.
원인: getModel 이 방법은user 대상을 되돌려줍니다. 원래 검색한user 대상을 창고에 넣은 후에 압축합니다. 이렇게 하면 오래된 값이 덮어쓰이기 때문에user 대상은 새로운 new로 바뀌고 해당하는 속성은 반드시 비어 있습니다.
해결 방법:
struts.xml의 action에서 속성 수정:modelDriven.refreshModel Before Result, 결과를 되돌리기 전에 사용자를 삭제합니다.이렇게 해야만 우리가 원하는 결과를 얻을 수 있다.
<interceptor-ref name="defaultStack">
              <param name="modelDriven.refreshModelBeforeResult">true</param>
            </interceptor-ref>

참조:http://blog.csdn.net/li_tengfei/article/details/6098145
       http://blog.csdn.net/zhang854429783/article/details/8221733

좋은 웹페이지 즐겨찾기