// 
//     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[+ダウンロード/フルサイズを視聴+] (39MB)

 

|
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の学習 +]
