2017-07-12 19 views
2

これらの問題に直面w.r.t Vaadin UIとURLマッピング。Vaadin URLマッピングの問題:サブパスURLマッピングと自動URLマッピングが機能しない

Problem1:

私は私のエンティティのための基本的なCRUD操作にVaadinを使用しようとしています。まず、/ subpath/xyz urlにUIクラスを公開したいと思います。しかし、サブパスのURLマッピングはどうにかして動作しません。 8080/myui /とlocalhostのではない:?8080 /サブパス/ myui/

私は何をしないのです

を(私は)維持するか@Spring(パス= "myui" を削除した場合、それはまだlocalhostにマップすることに注意してください

私はVaadinのマニュアルが、今のところ運以下となっている https://vaadin.com/docs/-/part/framework/application/application-environment.html#application.environment.servlet-mapping

Problem2: また、Vaadinは、クラス名から自動的にURLマッピングを生成していない例えばMyUIクラス名は、ローカルホストにマッピングする必要があります:8080 /私-ui/@SpringUIでパス属性を指定しないと(Vaadinのドキュメントに従って)

import com.vaadin.annotations.Theme; 
import com.vaadin.annotations.Title; 
import com.vaadin.annotations.VaadinServletConfiguration; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.spring.annotation.SpringUI; 
import com.vaadin.spring.server.SpringVaadinServlet; 
import com.vaadin.ui.*; 


import javax.servlet.annotation.WebServlet; 

@Theme("valo") 
@Title("My UI") 
@SpringUI(path="myui") 
public class MyUI extends UI { 
    @Override 
    protected void init(VaadinRequest request) { 
     // Create the content root layout for the UI 
     VerticalLayout content = new VerticalLayout(); 
     setContent(content); 

     // Display the greeting 
     content.addComponent(new Label("Hello World!")); 

     // Have a clickable button 
     content.addComponent(new Button("Click Me!", 
      click -> Notification.show("Clicked!"))); 
    } 
    @WebServlet(urlPatterns = {"/admin/*", "/VAADIN/*"}, name = "MyUIServlet", asyncSupported = true) 
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) 
    public static class MyUIServlet extends SpringVaadinServlet { 
    } 

} 

答えて

0
package vaadinUI; 

    import com.vaadin.annotations.Theme; 
    import com.vaadin.annotations.Title; 
    import com.vaadin.annotations.VaadinServletConfiguration; 
    import com.vaadin.server.VaadinRequest; 
    import com.vaadin.spring.annotation.SpringUI; 
    import com.vaadin.spring.server.SpringVaadinServlet; 
    import com.vaadin.ui.*; 


    import javax.servlet.annotation.WebServlet; 

    @Theme("valo") 
    @Title("My UI") 
    @SpringUI(path="myui/subpath") 
    public class MyUISubPath extends UI { 
     @Override 
     protected void init(VaadinRequest request) { 
      // Create the content root layout for the UI 
      VerticalLayout content = new VerticalLayout(); 
      setContent(content); 

      // Display the greeting 
      content.addComponent(new Label("Hello World!")); 

      // Have a clickable button 
      content.addComponent(new Button("Click Me!", 
       click -> Notification.show("Clicked!"))); 
     } 
    } 


package vaadinUI; 

import com.vaadin.annotations.Theme; 
import com.vaadin.annotations.Title; 
import com.vaadin.annotations.VaadinServletConfiguration; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.spring.annotation.SpringUI; 
import com.vaadin.spring.server.SpringVaadinServlet; 
import com.vaadin.ui.*; 


import javax.servlet.annotation.WebServlet; 

@Theme("valo") 
@Title("My UI") 
@SpringUI(path="myui") 
public class MyUI extends UI { 
    @Override 
    protected void init(VaadinRequest request) { 
     // Create the content root layout for the UI 
     VerticalLayout content = new VerticalLayout(); 
     setContent(content); 

     // Display the greeting 
     content.addComponent(new Label("Hello World!")); 

     // Have a clickable button 
     content.addComponent(new Button("Click Me!", 
      click -> Notification.show("Clicked!"))); 
    } 
} 

私は8.0.Xを使用していますが、これは私のために動作します。いくつかのことを変えなければならないかもしれません。異なるパスで同じUIクラスを再利用することはお勧めできません。または、フレームワークがこれを拒否します

問題2:「空の文字列(デフォルト)は、サーブレットのルートにUIをマップします」私が読む方法は....にマップすることです::8080/

EDIT

ドキュメント

EDIT

私はあなたのコードを試してみましたが、私はあまりにも説明したように、振る舞いの誤読バージョン。 @SpringUI()はルートにマップされ、パスマップはパスにマップされます。 myui/subpathにマップされたUIは期待通りに機能します。ですから、私は新しいプロジェクトを開始し、.m2レポをリフレッシュします。

FYI @WebServletの値がものよりも優先@VaadinServletConfiguration

あなたは、ブラウザ側でリロード/リフレッシュされていますか?コンテナを再起動してページをリロードして、違いがあるかどうかを確認することができます

+0

実際には、ドキュメントはv8ではデフォルトで、v7ではデフォルトでは別のパスがあります。https://vaadin.com/docs7/-/part7 ..... ' – Morfic

+0

私は8.0.5を使用しています。それは動作していません。 –

+0

私は春1.5.3リリースで同じバージョンを使用しています。 @SpringUI()はサーブレットのルートにマップされ、@SpringUI(path = "myui")は/ myuiにマップされます。 @SpringUI(path = "myui/subpath")は/ myui/subpathにマップされます。 – efekctive

関連する問題