2010-02-10 2 views
1

스트럿츠를 사용하고 있습니다. 1.3.10JSP 용 Struts의 활성 폼에 대한 일반적인 참조가 있습니까?

JSP에서는 액션과 관련된 양식에서 객체를 참조 할 수 있습니다. 그래서 나는 가질 수 있습니다 :

<bean:define id="someObject" name="myCurrentActionForm" property="someObject"/> 

어디서 struts-config.xml에 정의 된 양식이 있습니다.

위의 경우 "someObject"는 myCurrentActionForm이 상속하는 기본 클래스에 실제로 정의되어 있습니다.

하지만 "someObject"를 일반적인 방식으로 참조해야합니다. 기본 폼 클래스에 대한 참조를 사용하여

<bean:define id="someObject" name="baseForm" property="someObject"/> 

하지만이 건물은 찾을 수 없다는 오류가 발생합니다 :

나는 시도했다.

이 빈을 공통 JSP 조각에 정의해야합니다. 액션과 관련된 폼을 일반적인 방식으로 참조 할 수있는 방법이 있습니까?

TIA 여기

+0

정확한 오류 메시지는 무엇입니까? "모든 범위"baseForm 폼 의 모든 서브 클래스

+0

는 "콩을 찾을 수 없습니다." 그것은 다른 문제입니다. 내가 가지고있는 또 다른 하나는 기본 폼이 새로운 인스턴스라는 것입니다. 실제 액션 폼 인스턴스를 갖고 싶지만 일반화 된 방식으로 참조됩니다. : ( – sproketboy

답변

1

는 어떻게 내가 해냈어.

<jsp:useBean id="baseForm" class="web.common.BaseForm" scope="application"/> 

이렇게하면 사용할 수있는 응용 프로그램 범위에서 단일 인스턴스가 만들어집니다.

<jsp:useBean id="baseForm" class="web.common.BaseForm" scope="application"/> 

을하고 나중에에 사용 :

1

당신이 사용하는 경우

<bean:define id="someObject" name="baseForm" property="someObject"/> 

당신은 문제가 없어야합니다. <jsp:useBean>은 존재하지 않는 경우 응용 프로그램 범위에 개체를 만들고 모든 범위를 검색 할 때 pageContext.findAttribute(...)을 검색하므로 개체를 검색 할 때 아무런 문제가 없어야합니다 (<bean:define>).

"bean을 찾을 수 없습니다 :"모든 범위에서 baseForm "을 얻으면 <bean:define> (아마도 <jsp:useBean>)을 호출하지 않았을 때 양식이 없음을 의미합니다.

다른 하나는 응용 프로그램 범위가 모든 JSP 파일이 Bean에 액세스 할 수있을뿐만 아니라 모든 클라이언트가 동일한 객체를 공유한다는 것을 의미합니다. 빈이 사용자간에 공유하는 상태가 있으면 문제가 발생할 수 있습니다. 한 사용자는 다른 사용자의 기밀 데이터에 액세스 할 수 있습니다.

편집 :이 권리를 이해하려면 ... 당신은 당신이 struts-에 지정된 이름에 의존하지 않고, 당신의 JSP 파일의 일반적인 방법으로 (즉 것 무엇이든) 현재의 행동 양식을 참조 할 구성 (myCurrentActionForm, someOtherCurrentActionForm 등) 그냥 baseForm 같은 한정자를 사용하여?

예인 경우 다른 모든 작업 클래스가 확장되는 부모 Action 클래스를 직접 만들 수있는 것보다.이 부모 클래스의 execute(mapping, form, request, response) 메서드에서 form에 대한 참조를 원하는 범위에 배치하면 mapping 개체에서 정확한 범위를 추출하거나 baseForm 이름을 사용하여 원하는 범위에 저장할 수 있습니다. 멀리있을 것입니다. 응용 범위에서).

당신은 서브 클래스 작업을 execute 메소드를 호출하는 Template Method Pattern을 사용할 수 있습니다, 또는 당신이 그 일을 할 수있는 부모 execute 메소드를 호출하는 서브 클래스 execute 방법에 의존 할 수있다.

JSP에 들어가면 baseForm을 사용하여 양식에 액세스 할 수 있습니다. 태그는 객체를 찾을 때까지 검색하므로 범위가 무엇인지 신경 쓰지 않습니다. web.common.BaseForm에서 속성을 고수하면 하위 클래스 인스턴스가 아니라도 상관하지 않습니다.

+0

오른쪽 : 내가 얻을 – sproketboy

+0

내 편집 된 답변보기 –

관련 문제