为什么JSF传递的参数有时为空?

为什么JSF传递的参数有时为空?,jsf,richfaces,codi,Jsf,Richfaces,Codi,我将使用(myBean)作为参数的managedbean传递给另一个managedbean(PersonRoleSearch),以便调用第一个bean(myBean)的方法。但有时参数为null,因此我得到nullpointer异常。我无法解释为什么会发生这种情况 <a4j:commandLink id="PersonSearch" styleClass="no-decor" status="noAjaxStatus" execute="@s

我将使用(myBean)作为参数的managedbean传递给另一个managedbean(PersonRoleSearch),以便调用第一个bean(myBean)的方法。但有时参数为null,因此我得到nullpointer异常。我无法解释为什么会发生这种情况

<a4j:commandLink id="PersonSearch" styleClass="no-decor"
                        status="noAjaxStatus" execute="@searchGemOrderGroup"
                        immediate="true"
                        oncomplete="#{rich:component('personRoleSearchPopupPanel')}.show()"
                        action="#{personRoleSearch.doInit(myBean)}"
                        render="personRoleSearchPopupPanel">
                        <h:graphicImage value="/resources/icons/blue/searchperson.png"
                            alt="#{msg['personSearch.search']}" />
                    </a4j:commandLink>

原因是什么?

可能是bean的范围错误。查找CDI,您不必将bean作为参数传递。@Makhiel,但它可以工作98%。只是有时候是这样。你怎么解释呢?@Makhiel我怎么能在没有注入的情况下调用这些方法?@BalusC我怎么能防止这种情况?@BalusC在这种情况下很难找到最佳的代码部分。我不知道你到底需要什么。正如我之前所说的,它很难复制。如果它失败了,就没有任何保证。它能工作%98。但是,如果只有页面可见,则可以单击该按钮。这意味着managedbean应该在那里。。
 public void doInit(final MyBean target){...}

 public void doSomething(){
   target.myBeanMethod();

    ...}