2016-08-08 1 views
2

나는 지금 Jasper를 사용하여 보고서를 작성하고 있으며 거의 ​​모든 것이 잘 진행됩니다. 사용자가 보고서를 미리 볼 경우 보고서 (pdf)가 새 탭에 표시되는 방식으로 설정됩니다. 문제는 오류가 발생해도 원래 페이지에 피드백 패널을 표시하는 대신 새 탭이 열리는 것입니다.Java Wicket - 예외 발생시 새 탭 만들기에서 양식 방지

새로 열린 탭 대신 피드백 패널이 원본 페이지에 표시되는 방식으로 양식을 설정할 수 있습니까?

Form<?> form = new Form<Void>("form"); 
form.add(new AttributeAppender("target", Model.of("_blank"))); 

SubmitLink view= new SubmitLink("view") { 
    @Override 
    public void onSubmit() { 
     //code inside a try-catch to generate the report using Jasper} 
};  

CptiDownloadButton download = new CptiDownloadButton("download", new AbstractReadOnlyModel<File>(){ 
//CptiDownloadButton extends SubmitLink button and is a modification of Mr Ivaynberg's DownloadLink 
}; 


<form wicket:id="form"> 
    <a href="#" wicket:id="submit"><input type="button" wicket:message="value:search"/></a> 
    <a href="#" wicket:id="download"><input type="button" wicket:message="value:download"/></a> 
</form> 

미리 답변 해 주셔서 감사합니다. ^^

답변

0

대상이없는 양식 (Ajax)을 제출해야하며 가능한 오류를 확인한 후 실제 다운로드를 시작해야합니다.

Ajax 및 첨부 파일 내용 처리 예제는 https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow을 참조하십시오.

+0

안녕하세요 Mr Sven! 이미 다운로드 부분에 이미 괜찮아. 지금 원하는 것은 보고서를 미리 보거나 다운로드하는지에 관계없이 예외가 발생할 때 양식에서 새 Tab을 만들지 못하게하는 것입니다. –

+0

더 자세한 설명은 WiseTree의 대답을 참조하십시오. – svenmeier

2

양식에 target="_blank"으로 양식을 제출하는 경우 브라우저는 자동으로 양식 제출의 응답을 렌더링하는 새 탭을 엽니 다. 이것은 의도 한 동작이며,이를 방지하기 위해 표준 target="_blank" 동작을 위반합니다. 내가 말하는 것은 당신이이 표준 행동을 어기는 것이 당신이하고 싶은 일인지 정말로 생각해야한다는 것입니다.

그렇다면 여기에 대한 정보는 다음과 같습니다. 경고 : 깨끗하지 않을 것입니다.

Ajax (AjaxButton 또는 AjaxFormSubmitBehavior)를 사용하여 양식을 제출하십시오. ajax를 통해 수행되기 때문에 브라우저는 기본 양식 제출 동작을 호출하지 않으므로 새 탭을 열 수 없습니다.

그러면 Ajax는 양식 처리를 호출합니다. 오류가 발생하면 피드백 패널을 다시 렌더링하고 반환하십시오. 성공시 자바 스크립트를 추가하여 요청이 반환 될 때 해당 링크에서 기본 양식 제출을 호출합니다. 그러면 표준 양식 제출 동작이 수행되어 target="_blank"을 수행합니다. 양식에 대한 유효성을 한 번 더 확인하지만 원래 의도 한 동작을 수행합니다.

원하는 링크에서 기본 양식 제출을 호출하는 방법은 몇 가지 다른 방법으로 수행 할 수 있으며 완전히 전적으로 사용자에게 달려 있습니다. 신속하고 더러운 방법으로 당신은 지금 (시각적으로) 가지고있는 버튼을 숨길 수 있고 버튼을 클릭하기 위해 자바 스크립트를 수행 할 수 있습니다. 또는 숨겨진 양식 필드를 사용하여 못생긴 클릭 동작을 원하지 않으면 클릭 한 버튼을 식별 할 수 있습니다.