在第一部分中,我描述了如何开发一个简单的页面,其中显示了所有的quot; companiesquot;公司表中。现在,我想介绍如何添加一些额外的功能 - 创建新公司,编辑公司的详细信息。如果你有兴趣,看看{A}的外观。类图和实际状态
下面是我们的类图:
,这里的一些含2家公司的表页。
我们将添加
现在,我将添加一个按钮,每一行的表,这将直接页面一个网站,用户可以编辑该公司的详细信息和第二个按钮,这将允许创建一个新的公司。再次网页制作之前,我将开始与定义的方法,我们将需要在会话Bean(最底层)和额外的方法和领域,支持豆类(中间层)。会话Bean的新方法
在会话Bean中,我将添加一个方法称为quot; saveCompanyquot;public void saveCompany(Company company) {
company = em.merge(company);
em.persist(company);
}
这种方法将采取一个实例quot; Companyquot;对象,并且将执行一个quot; mergequot;这个对象持久化上下文的对象。如果已经有对象的持久化上下文相同的ID区分,比实体管理器将更新对象的持久化上下文状态。如果没有这样的对象,然后一个新的创造(或让我们说,新公司将被添加到持久化上下文,然后通过调用的quot;。persistquot;实体管理器的方法,该公司将被存储在数据库中。backing bean的变化
现在的backing bean将需要一些更多的变化。我将添加一个quot类型的字段; Companyquot;这将是一个公司,这实际上是显示或编辑。然后,而不是使用一个基本集合类型的列表,我将使用称为DataModel的一类,这是一个JSF框架的一部分,可以让我在GUI用户选择行。{C}
现在,当我的模型,我能够得到公司对象代表实际选定的行。这是显示方法quot; editCompanyquot;public String editCompany(){
company = (Company)companiesModel.getRowData();
return "edit-company";
}
你可以看到,该方法返回的字符串,具体"编辑companyquot;该字符串代表将由JSF框架中使用的一个导航规则的名称。基本上,它意味着用户将被重定向到另一个是在faces - config.xml文件中指定的页面。我稍后将显示。首先,让我把最后2个新的方法的backing bean,一个用于保存和创建一个新的公司之一。同样,该方法返回String值用于导航目的,它都将是明确的很快:)。
新的JSF页面显示公司的详细信息public String saveCompany(){
ssl.saveCompany(company);
return "show-companies";
}
public String newCompany(){
company = new Company();
return "edit-company";
}
让我们创建一个新的JSF JSP页面(在Web模块- GT,新GT; JSF JSP),并调用它的quot; company.jspquot;此页将被用来指定该公司的详细信息。代码很简单:<form>
</form>
<form>
<h1 class="brush:html"><outputtext value="Company Details:" /></h1>
<pre class="brush:html"> <panelgrid columns="2">
<outputtext value="Name" />
<inputtext value="#{sales.company.name}" />
<outputtext value="Description" />
<inputtext value="#{sales.company.description}" />
</panelgrid>
<commandbutton id="btnSave" value="Save" action="#{sales.saveCompany}" />
</pre>
</form>
你看,它采用的h:form标签。后来这个标签基本上是呈现为一个HTML表单标记。这个标签已经存在,如果你的页面包含按钮或执行某些操作的其他组件。您会看到一个按钮的作用是绑定的quot; saveCompanyquot;我们的backing bean和输入字段的值的方法是绑定的quot; companyquot;成员再次在backing bean中。页的公司,包含表的变化
现在让我们做一些改变的quot; companies.jspquot页面 - 页面,其中包含的所有公司的表。我将添加一个"; Editquot;按钮,每一行定义一个新的列,我会在页面的底部添加一个quot; Newquot;按钮。这些按钮都将使用先前在backing bean的中定义的方法。<form>
<h1><outputtext value="Companies List" /></h1>
<datatable value="#{sales.companiesModel}" var="item">
<column>
<facet name="header"><outputtext value="Name" /></facet>
<outputtext value="#{item.name}" />
</column>
<column>
<facet name="header"><outputtext value="Description" /></facet>
<outputtext value="#{item.description}" />
</column>
<column>
<commandbutton id="btnEdit" value="Edit" action="#{sales.editCompany}" />
</column>
</datatable>
<commandbutton id="btnNew" value="New" action="#{sales.newCompany}" />
</form>
注意,因为有表演动作的按钮,我不得不环绕整个表格由H:形式标记。faces - config.xml中的变化
确定 - 现在我们的网页,最后一步缺少解释的导航规则。正如我以前说过,这些规则是由JSF框架管理,并quot; calledquot;我们的支持bean的方法返回的字符串表达式(editCompany,saveCompany,newCompany)。打开文件quot;面临的config.xmlquot;在上层标签,选择"页Flowquot;您会看到您的网页图(应该有其中3:companies.jsp,company.jsp,index_tc.jsp)免费下载。编辑quot;页流程图,所以将类似于以下之一:
,您可以更改视图,XML和看到这些规则(页流程图可视化的导航规则的XML声明。 <navigation-rule>
<from-view-id>/companies.jsp</from-view-id>
<navigation-case>
<from-outcome>edit-company</from-outcome>
<to-view-id>/company.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/company.jsp</from-view-id>
<navigation-case>
<from-outcome>show-companies</from-outcome>
<to-view-id>/companies.jsp</to-view-id>
</navigation-case>
</navigation-rule>
确定。现在,你应该准备开始尝试项目。在quot; index.jspquot;页,我添加了索引页重定向到quot; companies.jspquot; - 让你不必键入的地址,它只是获取NetBeans中的项目运行后打开。
{S3}<forward page="matchesList.jsf" />