Jsf 2 JSF viewParam不适用于CDI

Jsf 2 JSF viewParam不适用于CDI,jsf-2,cdi,Jsf 2,Cdi,我正在尝试使我的页面可设置为书签,但它不起作用。代码如下: <f:metadata> <f:viewParam id="id" name="id" value="#{myBean.id}" /> <f:event type="preRenderView" listener="#{myBean.preRenderView}" /> </f:metadata> 当从浏览器调用page.jsf?id=3时,将

我正在尝试使我的页面可设置为书签,但它不起作用。代码如下:

   <f:metadata>
       <f:viewParam id="id" name="id" value="#{myBean.id}" />
       <f:event type="preRenderView"  listener="#{myBean.preRenderView}" />
    </f:metadata>

当从浏览器调用
page.jsf?id=3
时,将调用该方法,但未设置参数。有人知道怎么了?

所以。。当您用
@ManagedBean@ViewScoped
替换
@Named@ConversationScoped
时,完全相同的代码可以正常工作?这就是你的问题标题所暗示的。如果这是真的,那么您需要告诉更多关于正在使用的JSF和CDI实现/版本的信息(如果不确定,最好是应用服务器实现/版本)
@ConversationScoped
如果没有启动对话,其行为与请求作用域大致相同。另外,我不知道JSF在发现绑定到
对象
属性时的行为,您应该尝试使用
字符串
或数字类型。同样的代码对@ManagedBean或字符串或数字类型都不起作用。我使用的是Mojarra 2.1.7-jbossorg-1(20120227-1401)和WELD-000900 1.1.5(AS71)。我猜它实际上正在设置,或者至少正在尝试设置,您没有说任何异常,但是因为您没有将您的对话升级为长时间运行的对话,所以在请求结束时它会被销毁。您是否添加了任何断点以查看是否真的调用了某些内容?
@Named("myBean")
@ConversationScoped
public class MyBean implements Serializable {

   private Object id; //get set

   public void preRenderView()   {

       if (!FacesContext.getCurrentInstance().isPostback()) {   
           //test....
       }
   }
}