2013-07-23 23 views
0

我需要帮助,了解JSF与Java Class文件连接的方式。 在我目前使用的项目中,它使用类对象将JSF与Java类连接起来。 但我不知道对象初始化的位置。 在Struts中,我们通过Struts.xml连接JSP和动作。但在这里我没有看到任何映射,它只是调用使用JSF如何与视图连接。

#{classNameObject.methodName} 

这里classNameObject是一个对象不是一个类名的类名。

我的问题是这#{classNameObject.methodName}如何正确连接到CLASSNAME?

这里是代码样本

<p:dataTable id="dataTable" value="#{employeeList.empVarList}" 
           var="employee" emptyMessage="No Employees found" rows="15" 
           paginator="true" 
           paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
           rowsPerPageTemplate="10,15,20" rowIndexVar="rowIndex" 
           dynamic="false" cache="false" lazy="false" 
           style="display:block;overflow-y:none;overflow-x:auto;"> 

这里数据表连接到类EmployeeList的

它使用JSF,primefaces,spring,hibernate的

没有初始化为employeeList除本

private List<Employee> employeeList = new ArrayList<Employee>(); 

我只是一周体验除了休眠之外,在上面的所有内容中都已经读过。请帮助我解决所有问题。提前致谢。

+1

它使用注释和反射。 – BalusC

+0

这包含在JSF教程中(现在在提供的答案中)。 –

回答

2

JSF使用Unified Expression Language(所谓的EL)访问托管bean。这就是你在你的问题中提到的#{classNameObject.methodName},它是一个在页面呈现前被评估的表达式。

从Appart酒店,你定义一组豆子,这将是可用于访问,你可以做到这一点使用注释(@ManagedBean or @Named),或在您的定义他们的面孔上下文 xml文件,该框架将读取时应用程序启动。使用xml文件比注释更老式,实际上它更受欢迎。应用程序通过反射启动时,框架将扫描项目的所有相关注释。

对于bean名称,您可以自己选择它们,或者如果您不指定它们,JSF将为它们的类名指定小写的第一个字母。这样你可以从EL引用它们。

您还可以为您的bean定义一个范围,该范围用于定义其生存期。您可以为整个应用程序,每个用户会话,具体视图或每个请求都有一个bean。另外,不同的bean能够从更广泛的范围bean或来自相同范围的bean中访问信息。看看BalusC的this introduction

对于您提到的最后一点,如果您能够在客户端查看数据,则属性必须具有一些值。通常,属性在视图渲染前被初始化和填充,您可以在@PostConstruct方法或using a preRenderView event(您可以在bean的构造函数方法中执行此操作,但通常不会,因为DAO访问方法通常会抛出Exceptions)。此外,您想要从EL访问的每个属性都必须具有其getter方法。

请记住,使用干将阅读您已经加载的特性,在这种情况下,你需要省略get/is字:

@ManagedBean 
@ViewScoped 
public Class PersonBean{ 

    Person person; 

    public void postConstruct(){ 
     person = loadPerson(); 
    } 

    public Person getPerson(){ 
     return person; 
    } 

    public void changeName(String newName){ 
     person.setName(newName); 
    } 

} 

访问它:

<h:outputText value="#{personBean.person.name}" /> 

,并修改它,一旦它加载:

<h:commandButton value="Person name changer" 
    action="#{personBean.changeName('Ben')}" /> 
+0

谢谢男人.. !!好解释.. – Dileep