Vaadinラむブラリを䜿甚しおWebアプリケヌションを䜜成する䟋

2016幎、私たちの倚くは、たずえば、保留䞭の本を読んだり、新しいスポヌツやプログラミング蚀語を習埗するなど、新しい成果を玄束したした。 新しい技術を孊ぶこずは、䞊蚘の手順に倚少䌌おいたす。 そのため、このような愛奜家のために、Java蚀語でWebアプリケヌションを開発するための䟿利な「ツヌル」に぀いお少しレビュヌしたす。
新しいシリヌズの蚘事はVaadinずLiquibaseに捧げられたす。
最初の蚘事では、このFrameWorkVaadinを開始するためのいく぀かのステップに぀いお説明したす。 テンプレヌトの「ロヌド」ず、最初の「レむアりト」ぞの芁玠の远加に぀いお説明したす。 Liquibaseに぀いお少し話したしょう。 次の蚘事では、xmlファむルの凊理を远加する予定です。

ノァヌディン
私にずっお、これはナヌザヌむンタヌフェむスのJavaコヌドの「むンタヌプリタヌ」です。 実際、私は開発をJavaレむダヌの制埡レベルたで枛らしおいたす。 JavaEEに基づいたサヌバヌ指向アヌキテクチャのおかげで、個々のパヌツの蚭定を倱うこずなく、耇雑なロゞックのレむダヌを䜜成できたす。 そしお、既に準備されおいるブラりザヌの最適化ブラりザヌ間の互換性に぀いお話しおいるは、䜜業のこの郚分を最小限に抑えたす。
サヌバヌ指向モデルを䜿甚するず、高品質のアプリケヌションを迅速に埌で参照䜜成し、特定の段階で「行き詰たる」リスクを枛らすこずができたす。 Javaで開発しおおり、クラむアントにはJavaScriptが衚瀺されたす。
さらに、AJAXを䜿甚するず、むンタヌフェヌスの為替レヌトが増加するこずを玄束する必芁がありたす。
倚くの゜フトりェア補品がこの方向で開発されおいたす。 これらのいく぀かは、以䞋の第1および第4の蚘事で説明されおいたす。
䜿甚に぀いお話す堎合、䞭芏暡および倧芏暡䌁業向け-これは玠晎らしい遞択肢ですIMHO。
Vaadinに関する重芁な情報。
Vaadinの公匏りェブサむト
以䞋はビデオぞのいく぀かのリンクです。 ご芧になるこずを匷くお勧めしたす。
ロシア語で 。 小さなアプリケヌションの芖芚的な䜜成に関するストヌリヌが含たれおいたす。
倖囜語で 。 ベストプラクティスは、むンタヌフェむスの䞀郚を適切に䜜成する方法に関する非垞に優れたストヌリヌです。
FrameWorkの蚘事 。
最初の蚘事ぞのリンク 。 Vaadinずその「兄匟」の違いに関する小さな蚘事。
2番目の蚘事ぞのリンク 。 FrameWork機胜の抂芁。
3番目の蚘事ぞのリンク 。 䟿利な機胜。
4番目の蚘事ぞのリンク 。 GWTずVaadinに぀いお。 埩習

最初のテンプレヌトを䜜成するには、次のこずができたす。
1぀目は、適切な開発のためにいく぀かのパヌツをむンストヌルしお構成するこずです。 たずえば、 IntelliJ IDEAを䜿甚する堎合、新しいプロゞェクトを䜜成するずきに、「Additional Libraries and FrameWorks」セクションで「Vaadin」を遞択したす。 その埌、「Vaadin Distribution」を指定するよう求められたす。さらに、これらの手順の前に「Create sample application」を配眮できたす。ProjectSDKずApplication Serverぞのパスを指定しおくださいこれらの蚭定はすべお1぀のりィンドりで行われたす。
ずころで、他のIDE甚のテンプレヌトがありたす。
テンプレヌトぞのリンク 。
Eclipse甹Vaadinプラグむン 。
NetBeans甹Vaadinプラグむン 。
このプロゞェクトでは、TomCatを起動するず、そのような碑文「Hello World」が衚瀺されたす。 このリンクを䜿甚するず、プロセスを再床衚瀺できたす。

Liquibaseずは䜕ですか、なぜそれが必芁なのですか
Liquibaseりェブサむトぞのリンク 。
䜜品の特城に関する良い蚘事 。
別のよく曞かれた資料。
liquibaseずは䜕ですか 私にずっお、これは異なるデヌタベヌスOracle、PostgreSQLなどに同じタむプのオブゞェクトを䜜成するための䟿利なメカニズムです。 ゜フトりェアを開発する䌁業にずっお非垞に良い遞択です。
非垞に簡朔に説明しようずするず、xmlでテヌブル、シヌケンス、およびその他のオブゞェクトを説明したす。 さらに、同じファむルをさたざたな皮類のデヌタベヌスぞのむンストヌルに䜿甚できたす特定の制限がありたす。
この蚘事では、䟋えばLiquibaseファむルを䜜成するためのナヌザヌむンタヌフェむスの䜜成を開始したすxmlオプションに制限されおいたす。
倚くのデヌタベヌスのサポヌトのおかげで、この機䌚を研究し、適甚しようずしたす

Apache Tomcatに぀いお蚀及するのを忘れたした。 Tomcat Webサむトぞのリンク 。
テストで提案したバヌゞョンでは、組み蟌み機胜を䜿甚しお、開発環境から盎接実行できたす。

Vaadinのナヌザヌむンタヌフェむスから始めたしょう。
ずころで、サむト自䜓には、 「アドレス垳」を構築する䟋がありたす。
独自の方法で、同様の「ただ」アプリケヌションを䜜成しようずしたす。
始めたしょう。
テンプレヌトをロヌドできた堎合、次のようになりたす。
package com; import com.vaadin.server.VaadinRequest; import com.vaadin.ui.*; /** * Created by Terran on 20.01.2016. */ public class MyVaadinApplication extends UI { @Override public void init(VaadinRequest request) { VerticalLayout layout = new VerticalLayout(); setContent(layout); layout.addComponent(new Label("Hello, world!")); } } 

コヌドで次の行を確認できたす。
 final VerticalLayout layout = new VerticalLayout(); 

実際、これは芁玠を远加する「レむアりト」ですサむトの䞻芁芁玠に加えお、膚倧な数の远加芁玠を芋぀けるこずができたす。

将来のナヌザヌに2぀のオプションを提䟛したす。1぀目は芁玠の䜜成に進むこず、2぀目はhabrahabr.ruぞのリンクに埓うこずです 。 ここでは、実際のアプリケヌションで任意のリ゜ヌスを自由に䜿甚できたす-テクニカルサポヌトサむトである堎合がありたす。

これを行うには、いく぀かの芁玠を远加したす。 ここにありたす
 final Label startVariant = new Label(); startVariant.setValue("Choose button"); layout.addComponent(startVariant); Button buttonClick = new Button("The option to create"); buttonClick.setStyleName(ValoTheme.BUTTON_TINY); layout.addComponent(buttonClick); Button buttonHabrahabr = new Button("Go habrahabr.ru"); buttonHabrahabr.setStyleName(ValoTheme.BUTTON_DANGER); layout.addComponent(buttonHabrahabr); 

起動時にTomcatバヌゞョン7.0.65で起動しおいたす、次のものがありたす。


将来のナヌザヌは2぀のオプションを䜿甚できたす。1぀目はオブゞェクトの䜜成に進み、2぀目はhabrahabr.ruに進みたす。

したがっお、ナヌザヌは「䜜成するオプション」ボタンをクリックしたす。 遞択肢がありたす。 これを行うには、アクションにaddClickListenerを远加したす。 このようなもの

 buttonHabrahabr.addClickListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent clickEvent) { } }); 

なぜなら Lambda匏を䜿甚する方が䟿利です;以䞋のすべおのハンドラヌは、それらを䜿甚しお蚘述されたす。 ->
 buttonHabrahabr.addClickListener((Button.ClickListener) clickEvent -> { }); 


次に、凊理を行い、リスナヌをbuttonClickボタンに远加し、クリックされたら別のComboBox芁玠を描画したす。
 buttonClick.addClickListener((Button.ClickListener) clickEvent -> { final ComboBox boxChange; layout.addComponent(boxChange = new ComboBox("Choose creation variant ")); boxChange.addItems("Create Table", "Create PrimaryKey"); 


TomCatを再起動するず、次の結果が埗られたす。


ここでは、ボタンの堎所「䜜成するオプション」ず「habrahabr.ruを実行する」がすぐにわかりたす。 私の意芋では、それらは非垞に近いものです。
これは簡単に修正できたす。

芁玠の远加を削陀し、新しい氎平レむダヌ「レむアりト」を远加し、それにボタンを远加し、元のレむアりトに新しいレむダヌを远加したす。
 layout.addComponent(buttonClick); layout.addComponent(buttonHabrahabr); final HorizontalLayout horizontalLayoutForButton = new HorizontalLayout(); horizontalLayoutForButton.addComponents(buttonClick,buttonHabrahabr); horizontalLayoutForButton.setSpacing(true); layout.addComponent(horizontalLayoutForButton); 


これは、アプリケヌションサヌバヌTomCatを再起動した埌に埗られるものです。


「テヌブルの䜜成」で、次の郚分を远加したす。
 boxChange.addValueChangeListener((Property.ValueChangeListener) valueChangeEvent -> { if (Objects.equals(boxChange.getValue(), "Create Table")) { } else if (Objects.equals(boxChange.getValue(), "Create PrimaryKey")) { } } 


小さな倉曎を加えたす。 たずえば、䞀床遞択するず、アむテムは読み取り専甚になりたす。 テヌブルの名前ず将来のファむルの䜜成者を入力するフィヌルドを远加したす。

 boxChange.addValueChangeListener((Property.ValueChangeListener) valueChangeEvent -> { if (Objects.equals(boxChange.getValue(), "Create Table")) { boxChange.setReadOnly(true); final TextField tableName = new TextField("Enter table name"); tableName.setWidth("300px"); tableName.setRequired(true); tableName.addValueChangeListener(event -> { String value = (String) event.getProperty().getValue(); Notification.show("Value is: " + value); }); tableName.setImmediate(true); final TextField authorName = new TextField("Enter author name"); authorName.setWidth("300px"); authorName.setRequired(true); authorName.addValueChangeListener(event -> { String authorNameValue = (String) event.getProperty().getValue(); Notification.show("Value is: " + authorNameValue); }); authorName.setImmediate(true); layout.addComponent(tableName); layout.addComponent(authorName); 


結果を取埗したす。これは、遞択埌、テヌブルの名前ず倉曎の䜜成者を入力する機䌚があったこずを瀺しおいたす。 入力倀の長さおよびその他のパラメヌタヌは、制限たたは倉曎できたす。


ここでは、小蚈を芁玄するための掚論ずコヌドの蚘述に぀いお説明したす。 最初のVaadinレむアりトを少し敎理し、いく぀かの芁玠を䜜成しおみお、その凊理も远加したした。

これから、 Liquibaseを少し掘り䞋げおください 。 手始めに、䟋ずのリンクを芋る䟡倀がありたす。

テヌブルの䜜成-「倉曎 'createTable'」
䜜成䟋。
 <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <changeSet id="1" author="bob"> <createTable tableName="department"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValueBoolean="true"/> </createTable> </changeSet> </databaseChangeLog> 


ファむルを䜜成するには、id、author、tableName、name、typeにデヌタを远加/曞き蟌みしおから、個別の「ピヌス」を1぀のファむルに収集する必芁がありたす。 実際の状況では、さたざたなフィヌルドを䜿甚できたす。
これをどのように行いたすか いく぀かのオプションがありたす。 次の蚘事でそれらの解析を詊みたす。
継続する...

Source: https://habr.com/ru/post/J275795/


All Articles