2013-08-12 2 views
0

Tapestry에서 사용자가 페이지 A에서 페이지 B로 리디렉션되는 경우가 있습니다. 페이지 B가 표시되기 전에 때로는 페이지 C로 리디렉션되는 경우가 있습니다. 이 페이지에 나타나는 이와 같은 빨간색 팝업으로 표시 자바 스크립트 예외를 다음과 같은 결과 : 널 (null)로 나열태피스 트리의 자바 스크립트 예외 숨기기

Exception invoking function Tapestry.Initializer.activate with parameters ["example"]: TypeError: $(...) is null 

모든 요소가 페이지에서 내가 원하지 않는 B, 또는 표시하는 의도에서입니다. 이 시나리오에서는 페이지 A에서 페이지 C로 사용자를 직접 리디렉션 할 수 없습니다.

나 자신이 자바 스크립트 예외를 처리하거나 페이지를 숨기지 않고 페이지간에 리디렉션 할 수있는 적절한 태피스 트리 기법을 숨기려면 태피스 트리를 사용해야합니다. 현재 @AfterRender 함수에서 리디렉션 코드를 시작하여 사용자 이동 물마루 페이지를 시뮬레이트하고 있습니다.

편집 : 사용자를 클릭 한 후 1 페이지에

아래의 코드의 관련 부분을 추가했습니다 정말 UserDataPage는이 작업을 수행 세부 사항을 편집 할 필요가 있기 때문에 나는 사용자 페이지

@InjectPage 
UserDataPage userDataPage; 

@OnEvent(value = EventConstants.ACTION, component = "modify") 
Object onModify(Long userToEdit) { 
    userDataPage.setUserId(userToEdit); 
    userDataPage.setEditDetails(true); 
    return userDataPage; 
} 

에 그를 재 수정 :

@InjectPage 
UserDetailsPage userDetailsPage; 

@AfterRender 
Object setup() { 
    if(editDetails) { 
     userDetailsPage.setUserId(userToEdit); 
     return userDetailsPage; 
    } 
} 

가 (난 더 이상 UserDataPage에 아니에요 때문에, 분명히) 누락 UserDataPage에서 구성 요소에 대한 오류를 표시 UserDetailsPage가로드됩니다. 방화 광에서 스크립트에는 UserDataPage와 UserDetailsPage의 모든 요소가 포함되어 있습니다. 예를 들어 두 페이지 모두에 그리드 요소가 있으므로 결과로 생성 된 태피스 트리 스크립트는 그리드를 참조하고 자동으로 grid_0로 이름이 변경됩니다. 그런 다음 UserDataPage에서 그리드가 누락되었다는 오류가 발생합니다.

사용자 목록 (첫 번째 페이지)에서 UserDetailsPage로 직접 이동할 수 없습니다. UserDetailsPage는 UserDataPage에서 오는 리디렉션을 요구합니다. 그 요구 사항을 없애는 것은 허용되지 않습니다.

+0

항상 문제가 발생한 코드의 관련 부분을 게시 할 수 있습니다.구두 설명만으로는 사물을 막연하게 해석 할 수 있습니다. –

+0

자네가 가면, 나는 그것이 일을 깨끗이하기를 바란다. – Areinu

+0

왜'''UserDetailsPage''' 인스턴스를 페이지 1에서 돌려 보내지 않으십니까? 왜'''UserDataPage'''를 리턴 한 다음'''UserDataPage.setup()'''에서'''UserDetailsPage''로 리디렉션합니까? 두 번 리디렉션하는 것은 의미가 없습니다. –

답변

0

페이지간에 리디렉션하는 적절한 태피스 트리 방법은 페이지 클래스, 페이지 이름 또는 이벤트 처리기의 링크를 반환하는 것입니다.

public Object onActionFromMyLink() { 
    return MyPage.class; 
} 

당신이 자바 스크립트 함수 Tapestry.error을 무시할 수 태피스트리 클라이언트 측 오류를 숨기려면.

Tapestry.error = function() { 
    console.log(...); 
} 

하지만 문제는 귀하의 코드에 있다고 생각합니다.

UPD : 태피스트리에 탐색을 할 수

가장 좋은 방법은 페이지 A가 페이지 B 다음 페이지 B는 PageC로 리디렉션로 리디렉션 경우 page activation context

+0

Tapestry.error가 무시되었습니다. 고맙습니다. 또한 내가하는 일에 관심이 있다면 코드 질문을 추가했습니다. – Areinu

+1

실제로 소리를 고치는 대신 머리를 모래에 묻는 것처럼 들립니다. –

+0

'UPD' 란 무엇을 의미합니까? –

0

을 사용하는 것입니다, 나는이 가능하다고 생각하지 않습니다 PageB 렌더링 (또는 자바 스크립트 예외가 발생). PageB는 단순히 302 redirect 응답을 반환하며 브라우저는 PageC로 바로 이동합니다.

PageC가 onPassivate() 메서드 (또는 이와 동등한 @PageActivationContext annotation)가없고 해당 요청 사이에 활성화 컨텍스트가 손실되었다고 생각합니다.

http://jumpstart.doublenegative.com.au/jumpstart/examples/navigation/onactivateandonpassivate/3 http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/PageActivationContext.html