2012-11-02 4 views
1

두 개의 JSP 페이지가 있습니다 (예 : form.jspmyForm.jsp).Struts 1.3 : 제출 후 요청 속성이 손실되었습니다.

첫 번째 페이지 인 form.jsp에는 라디오 버튼 그룹 (양식 이름은 "form")이 있습니다.

사용자가이 양식을 제출하면 일부 정보가 db에서 검색되고 이러한 정보로 myForm.jsp의 양식이 작성됩니다 (양식 이름은 "myForm"임).

이 두 번째 양식을 제출하면 오류 만 표시되지만 db 값에서 작성된 양식 필드는 표시되지 않습니다. 예를 들어, 데이터베이스 레이블과 두 개의 단일 선택 단추 (property = "prop")에 대한 값을 검색합니다. struts-config.xml에서

, 내가 가진 :

<form-bean name="myForm" type="org.apache.struts.validator.MyValidatorActionForm"> 
<form-property name="prop" type="java.lang.Integer"></form-property> 
</form-bean> 

<action path="/form" input="/jsp/home.jsp" name="form" scope="request" type="myPackage.LoadInfo"> 

<forward name="Success" path="/jsp/myForm.jsp"/> 
<forward name="Failure" path="/jsp/home.jsp" />  
</action> 

<action path="/myForm" input="/jsp/myForm.jsp" name="myForm" validate="true" scope="request" type="myPackage.MyValidatorAction"> 
<forward name="Success" path="/jsp/success.jsp"/> 
<forward name="Failure" path="/jsp/failure.jsp"/> 
</action> 

myForm.jsp에서 :

<html:form action="/myForm"> 
<div><label>*&nbsp;<bean:message key="myForm.label"/></label> 
<c:forEach var="propTypes" items="${props}"> 
<html:radio property="prop" value="${propTypes.value}">${propTypes.label} 
    </html:radio> 
    </c:forEach> 
&nbsp;&nbsp;<html:errors property="prop" /> 
</div> 
<div><html:submit><bean:message key="myForm.label2"/></html:submit></div> 
</html:form> 

validation.xml에서 :

라디오 버튼을 선택하지 않고 양식을 제출하면 오류가 표시되지만 라디오 버튼은 표시되지 않습니다.

어떻게 모든 요청 속성을 유지 관리 할 수 ​​있습니까? 너무 범위 세션을 사용하려했으나 아무것도 변경되었습니다 :

<action path="/myForm" input="/jsp/myForm.jsp" name="myForm" validate="true" scope="session" type="myPackage.MyValidatorAction"> 
<forward name="Success" path="/jsp/success.jsp"/> 
<forward name="Failure" path="/jsp/failure.jsp"/> 
</action> 

는 내가 해결 사용하여 :

request.getSession().setAttribute("props", props); 

형태의 표시 전에 호출 작업 LoadInfo에. myForm.jsp에서

내가 사용하는 대신 스트럿 - config.xml 파일에서

request.getSession().getAttribute("props"); 

, 범위가 요청 남아있다.

그럼에도 불구하고 이것은 다른 브라우저 탭이 같은 세션을 공유하기 때문에 좋은 해결책이 아닙니다.

어떻게이 문제를 해결할 수 있습니까?

답변

1

JSP 페이지의 양식 필드는 해당 ActionForm 클래스의 해당 속성을 가져야합니다.

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

경우 :

그래서 당신의 JSP 당신은 다음과 같이 행동 양식에 해당 속성을 필요로하고 getter 및 setter가 있는지 확인

<html:radio name="myForm" property="name"> 

a를 다음 라디오 버튼이있는 경우 이 방법으로 설정하면 페이지를 새로 고칠 때 사용자가 입력 한 값이 있어야합니다.

+0

개인 int prop, get 및 set 메서드가 있습니다. 문제는 오류가있는 경우 (이 경우 라디오 버튼이 선택됨) 오류가 표시되지만 라디오 버튼은 표시되지 않습니다. 레이블과 msg 오류 만 있습니다. – Sefran2

+0

이것이 좋은 아이디어인지 또는 작동하는지 여부는 모르겠지만 요청에서 세션으로 범위를 변경해 보았습니까? – Susie

+0

나는 너무 생각하고 이미 세션으로 변경하려고했지만 작동하지 않습니다. – Sefran2

관련 문제