【问题标题】:How JSF connects with view.?JSF 如何与视图连接。?
【发布时间】:2013-07-23 12:00:57
【问题描述】:

我需要帮助,了解 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>();

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

【问题讨论】:

  • 它为此使用注释和反射。
  • 这在 JSF 教程中有介绍(现在在提供的答案中)。

标签: spring hibernate jsf primefaces


【解决方案1】:

JSF 使用Unified Expression Language 访问托管bean,即所谓的EL。这就是您在问题中提到的 #{classNameObject.methodName} 并且是在呈现页面之前评估的表达式。

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

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

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

对于您提到的最后一点,如果您能够在客户端看到数据,则属性必须具有一定的价值。通常属性在视图渲染之前被初始化和填充,你可以在@PostConstruct 方法或using a preRenderView event 中完成它(你也可以在 bean 的构造函数方法中完成它,但不常见,因为通常 DAO 访问方法可以抛出 @987654330 @)。此外,您要从 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')}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多