0

我想用 getter 方法获取值,但它不起作用。我将 SessionScoped 用于我的两个托管 bean。

<h:outputLabel for="commentInput" value="Comment:" />  
<p:inputTextarea id="commentInput" value="#{dashboardBean.currentComment}" rows="6" cols="25" label="commentInput" required="true"/>

@ManagedBean
@SessionScoped
public class DashboardBean implements Serializable 
{
    private String _currentComment = null;

    public String getCurrentComment() {
       return this._currentComment;
    }

    public void setCurrentComment(String _currentComment) {
       this._currentComment = _currentComment;
    }
}

如果我在这个类中调用 getter,它是有效的。

但在另一堂课中:

@ManagedBean
@SessionScoped
public class PanelListener extends AjaxBehaviorListenerImpl
{
    private DashboardBean _dashDashboardBean = null;

    public void editMemo(ActionEvent actionEvent)
    {
      System.out.println("Statements ==== [ " + _dashDashboardBean.getCurrentComment() + " ]");
    }
}

我有一个 NullPointerException。

4

2 回答 2

1

您必须使用@ManagedProperty注释。所以在 PanelListener 中试试这个,注意你需要一个 setter 来执行 bean 注入。您也只能将具有更大或相同范围的 bean 注入具有较低范围的 bean(例如,您可以将 SessionScoped 注入 RequestScoped 但不能相反)。

 @ManagedProperty("#{dashboardBean}")
 private DashboardBean bean;

 private void setDashboardBean(DashboardBean bean) {
     this.bean = bean;
 } 
于 2013-09-10T10:58:46.663 回答
1

您需要使用@ManagedProperty注释将一个 bean 注入另一个。

@ManagedProperty("#{dashboardBean}")
private DashboardBean bean;

public DashboardBean getBean(){
   return this.bean;
}
public void setBean(DashboardBean bean){
   this.bean = bean;
}

确保 的范围ManagedProperty大于或等于您要注入的 bean 的范围。

so here, DashBoardBean should have scope greater than or equal to PanelListener

Please note that JSF needs public getters and setters to access the fields

于 2013-09-10T11:02:39.400 回答