2017-07-12 2 views
2

Face à ces problèmes avec l'interface utilisateur Vaadin et le mappage d'URL.Problèmes de mappage d'URL Vaadin: mappage d'URL de sous-chemin et mappage d'URL automatique ne fonctionnant pas

problème1:

Je suis en train d'utiliser Vaadin pour les opérations CRUD de base pour mes entités. Pour commencer, je voudrais exposer une classe d'interface utilisateur à/subpath/xyz url. Mais le mappage de l'URL de sous-chemin ne fonctionne pas d'une manière ou d'une autre. (S'il vous plaît noter que lorsque je garde ou supprimer @Spring (path = "myui") mappe encore localhost: 8080/myui/et non localhost: 8080/subpath/myui/

Qu'est-ce que je suis absent

J'ai suivi la documentation de Vaadin mais pas de chance jusqu'à présent https://vaadin.com/docs/-/part/framework/application/application-environment.html#application.environment.servlet-mapping

Problem2. en outre, Vaadin ne génère pas mappages d'URL automatiquement à partir du nom de la classe par exemple MyUI classname doit être mis en correspondance avec localhost:. 8080/ma -ui/si je ne donne pas l'attribut path dans @SpringUI (selon les documents de 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 { 
    } 

} 

Répondre

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!"))); 
    } 
} 

J'utilise 8.0.x et cela fonctionne pour moi. Vous devrez peut-être changer certaines choses. Réutiliser la même classe d'interface utilisateur dans des chemins différents peut ne pas être souhaitable. Ou le cadre rejette cette conception par

Problème 2: « Une chaîne vide (par défaut) tracera l'interface utilisateur à la racine du servlet » la façon dont je l'ai lu est de la carte à ....: 8080/

EDIT

version Misread de docs

EDIT

J'ai essayé votre code et il se comporte comme je l'ai aussi. @SpringUI() correspond à la racine et le chemin correspond au chemin. L'interface utilisateur mappée à myui/subpath fonctionne comme prévu. Donc, je voudrais commencer avec un nouveau projet, et actualiser le repo .m2.

Pour votre information les valeurs @WebServlet ont la priorité sur les @VaadinServletConfiguration

Êtes-vous rafraîchissant/rechargeant sur le côté du navigateur? Vous pouvez redémarrer le conteneur (force totalement brute) et recharger la page pour voir si cela fait une différence

+0

Actuellement, les docs sont maintenant par défaut pour v8, alors que v7 a un chemin différent 'https://vaadin.com/docs7/-/part7 ..... ' – Morfic

+0

J'utilise 8.0.5. Ça ne marche pas. –

+0

J'utilise la même version avec la version printemps 1.5.3 et le code que j'ai posté fonctionne comme décrit dans la réponse. @SpringUI() correspond à la racine de servlet et @SpringUI (path = "myui") correspond à/myui. @SpringUI (path = "myui/subpath") correspond à/myui/subpath. – efekctive