【发布时间】: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