【问题标题】:Not able to make my class managed bean无法让我的班级托管 bean
【发布时间】:2014-01-25 12:04:57
【问题描述】:

我的 portlet 中有一个 userManagement.xhtml 文件名为 UserManagement,并且我在不同的面板中包含了另外 3 个 xhtml 文件

我的userManagement.xhtml页面基本是这样的

<h:form>
    <p:panel rendered="#{userManagement.condition}">
         <ui:include src="userTable.xhtml"/>
    </p:panel>
    <p:panel rendered="#{userManagement.condition}"/>
         <ui:include src="userDetails.xhtml"/>
    </p:panel>
    <p:panel rendered="#{userManagement.condition}"/>
         <ui:include src="userActivity.xhtml"/>
    </p:panel>
</h:form>

根据我用来向用户显示 3 个 xhtml 文件(面板)之一的渲染条件。

为了管理这些,我有 1 个托管 bean 名称作为 UserManagement.java。其他 3 个 xhtml 文件还有 3 个文件。

我尝试制作 UserTable.java、UserDetails.java 和 userActivity.java 但我得到了

com.example.useroperations.UserTable cannot be cast to javax.faces.component.UIComponent

现在我通过创建对象并在 UserManagement.java 中使用它,将它用作普通的 java 类。但我想让它成为托管 bean。

我的Java代码是这样的 用户管理.java

@ManagedBean
@ViewScoped
class UsermanageMent{
private UserTable userTable;

public void showUserTable(){
     this.userTable = new UserTable("some param");
     ...
     ...
}

public void setUserTable(UserTable userTable){
   this.userTable = userTable
}

public getUserTable(){
   return this.userTable();
}

}

UserTable.java

@ManagedBean
@ViewScoped
public UserTable{
   ......
   ......

   public UserTable(String param){
        ......
        this.retrieveListOfUser(param);

   }
   public void retrieveListOfUser(String param){
       ......
       ......
       SomeOtherClass obj = new SomeOtherClass();
       obj.retrieve();    // This is for DB call
   }
}

【问题讨论】:

  • 你能贴出你的java代码吗?
  • @XtremeBiker 我已经发布了我的 java 代码
  • UserTable 不打算成为托管 bean。此类将成为List 用户的包装器。托管 bean 应该只包含它。所以避免 UserTable 成为托管 bean。除此之外,您从哪里引用表格?请记住,ui:include 包含的所有内容都将在 rendered 属性之前进行评估。这是因为ui:include 在视图构建时工作,而rendered 在视图渲染时工作。因此,只要您继续使用ui:include,正确的方法就是c:choose
  • @XtremeBiker 在 userTable.xhtml 我有一些组件来过滤 dataTable(primefaces)。以及它们在UserTable.java中对应的java方法。那么这不是拥有托管 bean 的条件吗?
  • 只要包含在托管 bean 中即可。您可以将其引用为viewBean.userTable。你当然需要一个让 Jsf 能够访问它的 getter 方法。

标签: jsf jsf-2 liferay managed-bean


【解决方案1】:

这个问题的原因是我的数据表绑定 #{userTable} 和我的托管 bean UserTable 这将是相同的 #{userTable}。

因此我得到了

com.example.useroperations.UserTable 无法转换为 javax.faces.component.UIComponent

我刚刚将我的 dataTable 绑定更改为 #{userDataTable}。在那之后它起作用了。 :)

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多