0

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

#{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;">

这里 dataTable 连接到 EmployeeList 类

它使用 JSF、primefaces、Spring、Hibernate

没有初始化,employeeList除了这个

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

除了休眠之外,我在上述所有方面都只有一周的经验。请帮我处理所有你得到的东西。提前致谢。

4

1 回答 1

2

JSF使用统一表达式语言(即所谓的 EL)访问托管 bean 。这就是您在问题中提到的内容,#{classNameObject.methodName}并且是在呈现页面之前评估的表达式。

除此之外,您定义了一组可用于访问的 bean,您可以使用注释 (@ManagedBean@Named) 或在faces-context xml 文件中定义它们,框架将在启动应用程序时读取它们。使用 xml 文件比注释更老式,实际上更流行。当应用程序通过反射启动时,框架会扫描您项目的所有相关注释。

对于 bean 名称,您可以自己选择它们,或者,如果您不指定它们,JSF 将分配它们的类名,其首字母小写。这样你就可以从 EL 中引用它们。

您还可以为您的 bean 定义一个范围,用于定义其生命周期。您可以为整个应用程序、每个用户会话、具体视图或每个请求创建一个 bean。不同的 bean 也能够访问范围更广的 bean 或同一范围内的 bean 的信息。看看BalusC 的这个介绍

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

记得使用 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')}" />
于 2013-07-23T13:43:52.423 回答