返回首页


在第一部分中,我描述了如何开发一个简单的页面,其中显示了所有的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值用于导航目的,它都将是明确的很快:)。
public String saveCompany(){

    ssl.saveCompany(company);

    return "show-companies";

}



public String newCompany(){

    company = new Company();

    return "edit-company";



}
新的JSF页面显示公司的详细信息
让我们创建一个新的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中的项目运行后打开。
<forward page="matchesList.jsf" />
{S3}

回答

评论会员: 时间:2