2012-12-28 5 views
0

처음으로이 모든 새 스레드가 다음과 관련됩니다. Updating certain view programmatically from a JMS listener class 이제 서버 푸시 기능이 부족하여 간단한 계산으로 다른 문제가 있습니다. 같은 transient 모듈 뷰에있는 속성.OpenXava Transient View에서이 계산 된 속성이 작동하지 않는 이유

@View(members="Counter [counter], readItems") 
public class TrackIt { 

    @OneToMany 
    @ReadOnly 
    @OnSelectElementAction("TrackIt.checkSelectedReadItems") 
    private Collection<ReadItem> readItems; 

    public int getCounter() { 
     return readItems!=null?readItems.size():0; 
    } 

    public Collection<ReadItem> getReadItems() { 
     return readItems; 
    } 

    public void setReadItems(Collection<ReadItem> readItems) { 
     this.readItems = readItems; 
    } 

} 

는 그래서, ReamItem 내가 JMS 리스너에 의해 수신 된 객체를 지속하고있어 기업이다 여기 내 과도 뷰의 한 버전 (I 여러 가지 방법을 시도)입니다. 그래서 뷰의 간단한 수동 새로 고침을 사용하면서 처음에 계산 된 카운터 속성의 결과와 각 수동 새로 고침 이후의 결과를보고 싶었지만이 속성의 값을 얻지는 못했습니다. 카운터 레이블 뒤에 빈 공간 (btw, 콜렉션이 잘 보임). 나는 영구적 인 관리자와 함께 DB에 들어가서 계산 된 속성에 직접적으로 ReadItem 엔티티의 카운터를 가져 왔지만 작동하지 않았다. 또한 기본값 계산기를 사용해 보았지만 아무런 효과가 없었다. 하지만 여기서 가장 재미있는 것은 getCounter()를 100과 같은 단순한 int 만 반환하도록 변경했지만 너무 효과가 없습니다.

그래서이 계산 된 속성에 대한 모든 팁을 일시적으로 볼 수 있습니다.

미리 감사드립니다.

답변

0

아마도 사용자가보기를 채우는 방식과 관련이 있습니다. 보기를 채우기 위해 사용중인 코드를 넣으십시오.

+0

나는보기를 채우기 위해 다른 것을하지 않고있다. 단지 @View를 가진 클래스이고 컨트롤러와 모듈을 CRUD없이 세부적인 뷰로 선언한다. – HayrolR

+0

이제 콜렉션 만 올바르게 표시된다는 것을 알았지 만 콜렉션에 대한 뷰가 렌더링되는 순간에는 아무 것도 액세스 할 수 없습니다. 작은 엔티티를 사용하여 카운터를 지속 (JMS 리스너로)하고 임시보기에서 참조로 액세스하려고 시도했지만 사용 가능한 유일한 필드는 작은 엔티티의 ID로 두 개의 특성 (ID 컨트롤러에서 on-each-request = "true"인 액션을 사용하기로 결정했습니다. – HayrolR

+0

public class UpdateReadItemsCountAction extends ViewBaseAction // getView()를 사용합니다. {\t \t public void execute() 예외를 throw합니다. { \t \t super.executeAfter(); \t \t ReadItemCount readItemCount = XPersistence.getManager(). find (ReadItemCount.class, "402881c33bc3cb08013bc3cc1e8d0000"); \t \t 경우 (의 getView() getModelName() equalsIgnoreCase ("TrackIt")..) { \t \t \t의 getView() getSubview ("readItemCount")로 setModel (readItemCount)..; \t \t \t getView(). getSubview ("readItemCount"). refresh(); \t \t} \t \t super.executeBefore(); \t} \t }' – HayrolR