0

정말 디버그하기 어려운 문제가 있습니다. JSP 페이지에 Struts2 액션에 제출하는 폼 요소가 있습니다. 또한 제출 된 필드에 대한 유효성 검사를 수행 할 XML 양식 유효성 검증 파일이 있습니다. 파일에 'actionName-validation.xml'명명 규칙이 있습니다Struts 2 유효성 검사가 필요없는 새로운 요소가 추가 될 때 XML 양식 유효성 검사가 중단됩니다.

잘 작동하지만 폼 외부의 드롭 다운 상자를 추가하면 유효성 검사가 실패합니다. 대신 빈 페이지로 리다이렉트하고 나의 액션 클래스에있는 브레이크 포인트는 적중하지 않는다.

유효성 검사를 위해 일종의 디버깅 또는 로깅을 설정하는 방법이 있습니까? 양식 외부에 태그를 추가하면 왜 이런 일이 발생합니까? 나는 <s:select> 태그를 제거하면

<s:select id="dataSource" name="selectedDataSource" theme="simple" listValue="top" 
    headerKey="" headerValue="Choose Data" list="dataSources" size="1" /> 

<div id="forms"> 
    <s:form method="post" action="MyAction" theme="simple"> 
     <p> 
      <label class="input" for="name" 
      <span style="color:red;">*</span> 
      <span>Name</span><br> 
      <s:textfield theme="simple" name="name" maxlength="11" size="11" /> 
      <br> 
      <s:fielderror theme="plain"><s:param value="'name'" /</s:fielderror></label> 

     </p>  
     <s:submit value="Create New" theme="simple" cssStyle="display: block; clear: left;"/> 

    </s:form> 
</div> 

이 작동 : 여기

는 JSP 페이지의 코드입니다.

도움이 될 것입니다.

EDIT2 : 문제점을 발견했습니다. 양식을 제출할 작업 내에서 선택 드롭 다운을 채우는 데 사용되는 목록의 get 메소드가 필요했습니다.

페이지에 대해 처음에 호출 된 작업에 대해 하나의 작업이 있었지만 유효성 검사가 실패하고 양식 작업 클래스에서 해당 페이지를 다시로드하면 선택 드롭 다운을 다시 채우려고하고 getter가 필요합니다 그곳에. 나는 그것을 더 빨리 발견하지 못해서 어리 석다. 이러한 유형의 문제에 대한 로깅 또는 메시징의 유형이 있다면 좋을 것입니다.

감사합니다. 당신이 발생한

+0

아니요, 디버깅을 사용할 수 없습니다. –

답변

0

문제점을 발견했습니다. 양식을 제출할 작업 내에서 선택 드롭 다운을 채우는 데 사용되는 목록의 get 메소드가 필요했습니다.

페이지에 대해 처음에 호출 된 작업에 대해 하나의 작업이 있었지만 유효성 검사가 실패하고 양식 작업 클래스에서 해당 페이지를 다시로드하면 선택 드롭 다운을 다시 채우려고하고 getter가 필요합니다 그곳에. 나는 그것을 더 빨리 발견하지 못해서 어리 석다.이러한 유형의 문제에 대한 로깅 또는 메시징의 유형이 있다면 좋을 것입니다.

+1

"input"의 경우 JSP1을 다시 렌더링하는 Action2로 제출하는 JSP1을 렌더링하는 Action1이 있기 때문입니다. Action1과 Action2는 동일한 액션의 두 가지 메소드이거나 공통의 상위 액션을 공유해야합니다. 그렇지 않으면 바보 같은 디자인입니다. 관련 BTW : https://struts.apache.org/docs/how-do-we-repopulate-controls-when-validation-fails.html –

0

오류합니다 (검증 인터셉터에 의해 처리)를 검증 오류가 아니라 오류가합니다 (매개 변수 인터셉터에 의해 제기) 매개 변수를 설정할 때 발생하고 이는 을위한 변환 오류 인터셉터 당신이보고되지 않은 fieldError을 추가하기 때문에

  1. 당신의 INPUT 결과 빈 페이지에 토지와
  2. 텍스트 필드에 theme="simple"을 사용하고 있으므로 표시하려면 <s:fielderror fieldName="dataSource" />을 추가해야합니다 (모두 표시하려면 <s:fielderror />).

읽기 how the INPUT result works, 즉 가장 가능성이 있음을, 당신의 선택에 listKey 속성을 지정하지 않은 한 사실과 관련이, 당신은 문제를 발견 할 것입니다, 오류를 인쇄 INPUT 페이지로 페이지를 설정 데이터 소스의 코드 대신 설명을 selectedDataSource (아마도 Integer)으로 보냅니다.

+0

나는 전에 listKey = "top"을 가지고 있었지만 여전히 작동하지 않았다. 드롭 다운은 작업의 목록에 의해 채워지며 양식 외부에 있기 때문에 제출되지 않아서 왜 문제가 발생하는지 이해가되지 않습니다. 페이지로 리디렉션되는 INPUT의 사례를 추가해 보겠습니다. 편집 : struts.xml을 검사 한 결과 동일한 페이지로 설정된 입력 결과가 표시되지만 여전히 빈 페이지가 표시됩니다. – Seephor

+0

태그를 에서 으로 변경했습니다. 그렇다면 은 listKey로 정의 된 경우에도 작동하지 않습니다. 나는 그것을위한 적절한 getter와 setter 메소드를 가지고있다. 내 액션에서 getSelectedDataSource 메소드를 호출하면 null을 반환합니다. 요소가 양식 외부에있을 때 왜이 작업을 시도합니까? – Seephor