// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 使用 NetBeans IDE 进行 PrimeFaces 开发的视频
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 NetBeans IDE 进行 PrimeFaces 开发的视频 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 NetBeans IDE 进行 PrimeFaces 开发的视频

|===
|演示如何通过 NetBeans IDE 使用 Java EE 7、Maven 和 PrimeFaces 创建完整 CRUD 应用程序的截屏视频。

作者：Geertjan Wielenga
播放时长：4:39

link:http://bits.netbeans.org/media/prime-faces-nb8.mp4[+下载/观看全图+] (39 MB)

 

|
link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20PrimeFaces%20Development%20with%20NetBeans%20IDE[+发送有关此教程的反馈意见+]
 
|===


== 相关链接

* 演示：link:javaee-gettingstarted-screencast.html[+Java EE 应用程序入门指南+]
* link:javaee-gettingstarted.html[+Java EE 应用程序入门指南+]
* link:javaee-intro.html[+Java EE 技术简介+]
* link:../../trails/java-ee.html[+Java EE 和 Java Web 学习资源 +]
