Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JSF如何与视图连接。?_Spring_Hibernate_Jsf_Primefaces - Fatal编程技术网

Spring JSF如何与视图连接。?

Spring JSF如何与视图连接。?,spring,hibernate,jsf,primefaces,Spring,Hibernate,Jsf,Primefaces,我需要帮助,了解JSF与Java类文件的连接方式。 在我目前参与的项目中,它使用类对象将JSF与Java类连接起来。 但是我不知道对象初始化在哪里。 在Struts中,我们通过Struts.xml将JSP与action连接起来。但是在这里我没有看到任何映射,它只是使用 #{classNameObject.methodName} 这里的classNameObject是一个对象而不是类名 我的问题是这个#{classNameObject.methodName}如何准确地连接到CLASSNAME 下

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

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

除冬眠外,我只经历了一周以上的一切。请帮我拿你所有的东西。提前谢谢

JSF使用所谓的EL访问托管bean。这就是您在问题中提到的
#{classNameObject.methodName}
,是在呈现页面之前计算的表达式

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

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

您还可以为bean定义一个作用域,用于定义其生存期。您可以为整个应用程序、每个用户会话、具体视图或每个请求提供一个bean。另外,不同的bean能够从范围更广的bean或同一范围内的bean访问信息。看看巴卢斯的作品

关于最后一点,如果您能够在客户端看到数据,则属性必须具有某些值。通常在视图呈现之前初始化和填充属性,您可以在
@PostConstruct
方法或(您也可以在bean的构造函数方法中执行,但这并不常见,因为DAO访问方法通常可以抛出
异常
)。另外,要从EL访问的每个属性都必须有其getter方法

记住使用getter读取已经加载的属性,在这种情况下,需要省略
get/is
word:

@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')}" />


它使用注释和反射来实现这一点。JSF教程(现在提供的答案中)对此进行了介绍。
<h:commandButton value="Person name changer" 
    action="#{personBean.changeName('Ben')}" />