2014-04-15 50 views
1

我正在嘗試編寫簡單的Vaadin窗體。我想在用戶點擊按鈕後將文本從TextField寫入Label。Vaadin:將TextField中的文本設置爲按鈕後的標籤單擊

我有這樣的代碼:

package com.example; 

import javax.servlet.annotation.WebServlet; 

import com.vaadin.annotations.VaadinServletConfiguration; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.server.VaadinServlet; 
import com.vaadin.ui.Button; 
import com.vaadin.ui.Button.ClickEvent; 
import com.vaadin.ui.Label; 
import com.vaadin.ui.TextField; 
import com.vaadin.ui.UI; 
import com.vaadin.ui.VerticalLayout; 

public class TestForm extends UI { 

    @WebServlet(value = "/TestForm", asyncSupported = true) 
    @VaadinServletConfiguration(productionMode = false, ui = TestForm.class) 
    public static class Servlet extends VaadinServlet { 
    } 

    private TextField tf; 
    private Label lbl; 
    private Button btn; 

    @Override 
    protected void init(VaadinRequest request) { 
     final VerticalLayout layout = new VerticalLayout(); 
     layout.setMargin(true); 
     setContent(layout); 

     tf = new TextField("Enter text"); 
     lbl = new Label(); 
     btn = new Button("Click");  

     btn.addClickListener(new Button.ClickListener() { 
      public void buttonClick(ClickEvent event) { 
       lbl.setCaption(tf.getValue()); 
      } 
     }); 

     layout.addComponent(tf); 
     layout.addComponent(btn); 
     layout.addComponent(lbl);  

    } 
} 

但是在我點擊按鈕doensn't發生與標籤,但網頁瀏覽器顯示錯誤:

通信問題 採取注未保存的數據, (SyntaxError)stack:eval @ [native code] Jda BR Zc Xc line:340:意外標記'<' - 原始JSON文本:html>

Wha我做得不好?

+0

我創建了一個測試項目,您的代碼工作。控制檯中是否有任何堆棧跟蹤? – nexus

+0

看到nexus的評論後,我寫了答案。沒想到親自嘗試你的代碼。如果你有一個堆棧跟蹤,它確實很有用。 –

回答

2

編輯 問題是你在你的web.xml中有兩個servlet映射。 我註釋掉其中之一:

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="vaadinpokus" version="3.0"> 

    <display-name>vaadintest</display-name> 
    <description>...</description> 
    <context-param> 
     <description>Vaadin production mode</description> 
     <param-name>productionMode</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> 
    <init-param> 
      <param-name>UI</param-name> 
      <param-value>com.example.MyVaadinUI</param-value> 
    </init-param> 
    <async-supported>true</async-supported> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <!--<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/VAADIN/*</url-pattern> 
    </servlet-mapping>--> 
</web-app> 

現在,它應該工作。 感謝您分享您的代碼。這種調試應用程序更容易。

+0

我試試這個,但它仍然不起作用。有我的項目代碼https://dl.dropboxusercontent.com/u/6943408/vaadintest.zip你可以看看嗎?當我點擊按鈕,我得到這個錯誤https://db.tt/RpWcbMCA – martin

+1

我會看看它,一旦我回家 –

+0

我試圖在另一臺計算機上編譯項目,並使用碼頭,而不是tomcat,但我得到同樣的錯誤:-( – martin

0

您應該嘗試lbl.setValue而不是lbl.setCaption

btn.addClickListener(new Button.ClickListener() { 
    public void buttonClick(ClickEvent event) { 
     lbl.setValue(tf.getValue()); 
    } 
}); 
相關問題