2015-01-18 3 views
0

저는 10 살짜리 Struts 1.2 애플리케이션의 유지 보수를 맡았습니다. (너무 복잡하고 게시하기에 독점적입니다.)Struts ActionForm 잃어버린 요청 범위

응용 프로그램은 이전에 세션에 저장되었던 몇 가지 ActionForms를 사용합니다. 최신 변경 요청은 동시에 여러 ActionForm을 열 것을 요구하기 때문에 ActionForm의 구성을 세션 범위에서 struts-config로 범위를 요청하도록 변경했습니다.

이 변경으로 PageContext 개체 내에서 ActionForm을 찾는 사용자 지정 태그 코드가 손상됩니다. (그리고 우리가이 오류로 인해 테스트 할 수 없었던 다른 기능을 깰 수 있습니다.)

을 코드는이 호출에 TagUtils.getRealValueFromBean

내가 해봤

조정 매개 변수를 사용하여 ActionForm을 찾고 있습니다 요청 범위를 지정하고 요청 객체의 속성 내에서 살펴 보았지만 ActionForm이 없습니다! JSP 내의 Java 코드는 Request 객체 내에 그러한 속성을 보여주지 않습니다. (새로 고침 이벤트가 새 ActionForm을 만들 수 있지만 여기에는 Request 객체 내에 ActionForm이 전혀 없다고 들었습니다.) 아직 데이터베이스에서 객체를 가져 오는 Action의 맨 아래에 ActionForm이 있습니다. Request 객체.

나는 세션이나 요청 범위 중 하나에 구성 할 수있는 ActionForm이있는 작은 테스트 응용 프로그램을 만들었지 만 요청에서의 ActionForm의 검색이 잘 작동!

/방식을 추적하는 위치의 어떤 생각을 ActionForm이 어떻게 달라 지는지 아래에서 확인하십시오.

또는 ActionFor의 여러 인스턴스를 지원하는 방법 scope=session을 유지하면서 m?

+1

당신이 말했던 때의 의미는 무엇입니까? : * 여러 개의 ActionForm을 동시에 열 수 있습니까? 같은'ActionForm'의 여러 인스턴스를 사용하는 동일한 요청? –

+0

이 응용 프로그램에서 ActionForm은 도메인 객체에 매핑됩니다. 응용 프로그램은 사용자가 한 번에 단일 도메인 개체를 열도록 제한했지만 사용자는 한 번에 둘 이상의 열 수있는 기능을 요청했습니다. – Mitch

+0

각 사용자에 대한 객체 목록 */ActionForm은 어떻습니까? 그것이'scope = session'으로 남아 있다고 가정합니다. –

답변

0

다음과 같은 시도 할 수 있습니다 다음 ActionForm에서

  • : 다음

    public class Foo { 
    
        private String name; 
    
        public String getName() { 
         return name; 
        } 
    
        public void setName(String name) { 
         this.name = name; 
        } 
    
    } 
    

    : 내 도메인 클래스와 scope="session"Foo 가정

    private static Map map = new HashMap(); 
    
    public Foo getFoo(String page) { 
        if (!map.containsKey(page)) { 
         map.put(page, new Foo()); 
        } 
        return (Foo) map.get(page); 
    } 
    
    public void setFoo(String page, Foo foo) { 
        map.put(page, foo); 
    } 
    
  • ,536 page1은 임의의 이름, 예컨대 : 현재 페이지의 이름입니다
  • 입력 JSP

    <html:text property="foo(page1).name" /> 
    

    합니다. foo(page1).name은 등록 정보의 이름이므로 Struts가 서버로 전송 될 때 자동으로 채워집니다.

  • 출력 JSP

    • E xpression L anguage (EL)를 : 스트럿 부착

      ${TestForm.getFoo('page1').name} 
      
    • :

      <bean:write name="TestForm" property="foo(page1).name" /> 
      
    ,

    여기서 TestFormActionForm (struts-config.xml 파일에 정의 됨)의 이름입니다.

+0

아직이 아이디어를 시도하고 있습니다. 응용 프로그램은 매우 복잡한 코드 (예 : 사용자 정의 태그)가 이전 유형의 정보가있는 bean을 기대합니다. 바라건대, 우리는 이것을 작동시킬 수 있습니다. 아이디어를 가져 주셔서 감사합니다. – Mitch

+0

구현하는 데 시간이 걸렸지 만 접근 방식이 우리를 위해 일하는 것처럼 보입니다. 고마워, 폴! – Mitch

+0

근무 중입니까? 좋은 소식이에요. –

관련 문제