2016-08-10 16 views
0

我收到两个名为uId和oId(都是long)的上下文。Tapestry - 接收两个上下文并在窗体中使用它们

使用onActivate我将userId上下文保存在变量userId中,与orderId相同。 当我在里面onActivate我可以打印这两个变量,但如果我使用(例如)一个窗体,userId为空。

我怎样才能访问我的表单中的这些变量。

下面的代码:

public class newMessage{ 

@Property 
private Long userId; 

@Property 
private Long orderId; 

@Component 
private Form newMessageForm; 


void onActivate(Long userId, Long orderId){ 
    this.userId = userId; 
    System.out.println("User Id: " + userId); 
    this.orderId = orderId; 
    System.out.println("Order Id: " + orderId); 
} 


@OnEvent(value = EventConstants.VALIDATE, component = "newMessageForm") 
public void checkForm() { 
    System.out.println("userId: " + userId); 
    System.out.println("orderId: " + orderId); 
} 

回答

0

你缺少onPassivate方法,增加了激活上下文链接和表格,以便在明年的请求这些值将再次可用。这个方法应该返回你在onActivate方法中所期望的。 一些更多的信息可以在这里找到:

JumpStart onActivate/onPassivate

所以你的情况添加下面的方法应该这样做:

Object[] onPassivate() { 
    return new Object[] { userId, orderId }; 
} 
+0

感谢您的帮助内森。我会试试看。 – eloygperez

+0

好的,如果这是您问题的解决方案,请将其设为已接受的答案。 –

0

@PageActivationContext现在通过在5.4增加了新的index功能支持多个值。如果你使用这个,那么你不需要明确的onActivateonPassivate声明。

如:

public class NewMessage { 
    @Property 
    @PageActivationContext(index=0) 
    private Long userId; 

    @Property 
    @PageActivationContext(index=1) 
    private Long orderId; 

更多信息here

相关问题