2012-02-29 3 views
0

이 작업은 여섯 번 시도 했으므로 가능하다는 것을 알고 있습니다. 나는 단지 어떻게 기억할 수 없다.Struts 1 ActionForm을 HttpSession 객체의 데이터로 초기화하십시오.

Struts 1 ActionForm의 속성을 사용자의 HttpSession 객체의 데이터로 초기화하고 싶습니다. 단, 양식을 처음 만들 때만 가능합니다. 실제로 HttpSession에서 오는 사실에 대해 너무 많이 걱정하지 마십시오. 중요한 점은 데이터가 동적이며 사용자별로 한 번만 초기화된다는 것입니다.

또한 사용자가이 필드의 데이터를 변경하면 사용자의 항목이 유지되어야합니다. 즉, 사용자가 처음 양식을 볼 때 초기화 된 데이터가 표시됩니다. 그런 다음 필드를 변경하고 양식을 제출하고 (관련 작업을 호출하여) 나중에 나중에이 양식으로 돌아 오면 해당 필드에 해당 항목이 표시되어야합니다.

분명히 struts-config.xml에서 필드를 초기화하는 것은 데이터가 동적이고 사용자별로 있기 때문에 작동하지 않습니다. 폼의 생성자에 대해서도 마찬가지입니다. ActionForm의 reset() 메서드는 속성을 기본 상태로 재설정하기 위해 호출되지만 양식이 처음로드되고 페이지에 표시되기 전에 호출되는지는 기억이 안납니다. 그것이 옵션이라면 가정합니다. 그러나 첫 번째 호출에서 초기화를 수행하기를 원할 것입니다. 그게 그냥 약간 복잡해 보입니다. (저는 boFirstTime 멤버 변수 플래그가 필요합니까?).

아무도 도와 줄 수 있습니까?

답변

1

결국 나는 ActionForm의 reset()을 오버라이드하고 null 또는 공백 인 경우에만 원하는 속성을 설정했습니다. 초기화 할 필요가있는 속성은 클래스 멤버 변수 _strMailTo에 표시됩니다 (아무도 알지 못하지만 멤버 변수에 대한 밑줄을 더 이상 사용하지 않습니다).

reset()은 ActionForm 속성이 처음으로 사용되어 관련 Action에 대한 양식 필드를 채우기 전에 호출됩니다. 이런 방식으로 사용자가 처음 양식을 보는 순간 내 미리 채워진 데이터가 있습니다. 그러나 그들이 그것을 바꿔 나중에 양식에 다시 올리면 마지막으로 양식을 제출할 때 입력란에 텍스트가 표시됩니다.

나는 ... 나는 또한 여전히 더 이상 스트럿츠 1 사용하는 유일한 사람 어쩌면 생각

public void reset(ActionMapping mapping, HttpServletRequest request) { 
    if (_strMailTo == null || _strMailTo.equals("")) { 
     String strRemoteUser = request.getRemoteUser(); 
     _strMailTo = chOps.UtilityUsers.getEmail(strRemoteUser); 
    } 
}