2011-02-02 1 views
1

일부 프로젝트의 검색 페이지를 만들어야합니다. 입력 필드는 다음과 같습니다제출 후 JSF + richfaces 문제가 발생했습니다.

<h:inputText styleClass="field35" value="#{searchBean.country}"></h:inputText> 
<h:inputText maxlength="20" styleClass="field35" value="#{searchBean.destination}"></h:inputText> 
<rich:calendar datePattern="dd/MM/yyyy" value="#{searchBean.startDate}"></rich:calendar> 
<rich:calendar datePattern="dd/MM/yyyy" value="#{searchBean.endDate}"></rich:calendar> 

을 나는 누른 후 :

<h:commandButton id="cb41" action="#{searchBean.processForm}" value="Search" styleClass="button" /> 

나는 결과는 같은 페이지에서 rich:dataTable 섹션에서 인쇄 할 것으로 예상된다. processForm 방법 결과 변수

<rich:dataTable value="#{searchBean.results}" var="journey"> 

데이터베이스는 사용자로부터의 데이터를 동일한 페이지에 전달 채워져있다.

처음 검색 후에도 문제가 없지만 검색을 다시 누르면 bean과 페이지 입력 필드 사이의 바인딩이 손실됩니다. 즉, country, destination, startData 및 endDate의 processForm 메서드에서 페이지의 해당 필드에 무엇이 있더라도 null 만 가져옵니다.

빈의 범위는 요청이며 모든 필드에는 getter와 setter가 있습니다.

누구에게 어떤 문제가있을 수 있습니까?

감사합니다.

편집 : 덕분에 t-EDD 세션 범위 근무 변경, 그러나 그것은 성능 살인자의 비트가 세션에서 모든 시간을 전체 콩을 유지하기 위해 (복잡한 내가 원하는 페이지를 떠나 그 때마다 삭제)입니다 . 왜 콩이 파괴 되었는가를 이해하지만, 다음 페이지에서 적절한 값으로 다음 페이지를 요청하면 새 페이지가 생성되어서는 안됩니까?

+1

사용할 수 있습니다 세션 범위에서 bean은 성능을 저하시키는 요인입니다! 그것은 무엇입니까 - 그것은 서버에서 사용자 세션 당 하나의 수명 동안 당신의 bean을 유지하고 있습니다. wchich는 어떤 자원을 필요로하지만 그것의 문제는 생각하지 않습니다. 사용자 세션이 만료되면 Bean이 삭제됩니다. – Eduard

답변

2

은 당신이 당신의 페이지에

<t:saveState value="#{searchBean}" /> 

를 추가해야 할 것 같다.

이 컨트롤러는 요청 사이에 빈의 상태를 저장합니다 (뷰의 구성 요소 트리 안에 모델 값을 저장할 수있는 기능을 제공합니다). 방법으로 데이터가 (내가하지 않는 것이 좋습니다) 세션 빈의 범위를 변경할 필요없이 저장됩니다

당신은 또한 내가 퍼팅에 동의하지 않는

<a4j:keepAlive beanName="searchBean"/> 
+0

그게 다예요. 고마워. – Klark

1

이 문제는 bean 요청의 범위라고 생각합니다. 요청이있을 때마다 데이터를로드합니까? 그렇지 않다면 값이 null이라는 사실을 분명히 알 수 있습니다. .. 세션 범위를 시도하거나 당신이 당신의 서비스에서 데이터를 가져 오거나 elswere 할 것

편집 : 여기

올리기가 많은 도움이 될 어차피없이 컨트롤러의 코드. 이 문제는 빈을 세션 범위에 넣지 않고도 해결할 수있다. 즉, gettres와 setter를 사용하여 요청 사이의 bean 특성에 데이터를 저장해야합니다.

+0

감사합니다 t-edd, 나는 내 질문을 업데이트 했으므로 기분이 좋고 좀 더 나를 도와 주려고 노력한다. :) – Klark