2013-02-18 26 views
0

我有一个从GXT 2.2.5库创建的接口,现在我需要从TextField获取用户输入的值并将其发送到服务器。我怎样才能让这个用户从文本框输入值?下面的代码示例:获取小部件的值并发送到服务器

package kz.bimash.client; 

import com.extjs.gxt.ui.client.widget.LayoutContainer; 

import com.extjs.gxt.ui.client.widget.LayoutContainer; 
import com.extjs.gxt.ui.client.widget.Slider; 
import com.extjs.gxt.ui.client.widget.VerticalPanel; 
import com.extjs.gxt.ui.client.widget.button.Button; 
import com.extjs.gxt.ui.client.widget.layout.FlowLayout; 
import com.extjs.gxt.ui.client.widget.layout.FormData; 
import com.extjs.gxt.ui.client.widget.layout.FormLayout; 
import com.google.gwt.i18n.client.NumberFormat; 
import com.google.gwt.user.client.Element; 

public class Form extends LayoutContainer { 

private VerticalPanel vp; 

private FormData formData; 

@Override 
protected void onRender(Element parent, int index) { 
    super.onRender(parent, index); 
    formData = new FormData("-20"); 
    vp = new VerticalPanel(); 
    vp.ensureDebugId("vps"); 
    vp.setSpacing(10); 
    //createForm1(); 
    createForm2(); 
    add(vp); 
} 



private void createForm2() { 
    FormPanel form2 = new FormPanel(); 
    form2.ensureDebugId("pan"); 
    form2.setFrame(true); 
    form2.setHeading("Simple Form with FieldSets"); 
    form2.setWidth(350); 
    form2.setLayout(new FlowLayout()); 

    FieldSet fieldSet = new FieldSet(); 
    fieldSet.setHeading("User Information"); 
    fieldSet.setCheckboxToggle(true); 

    FormLayout layout = new FormLayout(); 
    layout.setLabelWidth(75); 
    fieldSet.setLayout(layout); 

    TextField<String> firstName = new TextField<String>(); 

    firstName.setFieldLabel("First Name"); 
    firstName.ensureDebugId("firstName"); 
    firstName.setValue("olzheke"); 
    firstName.setAllowBlank(false); 
    fieldSet.add(firstName, formData); 

    TextField<String> lastName = new TextField<String>(); 
    lastName.setFieldLabel("Last Name"); 
    lastName.setValue(firstName.getItemId()); 
    fieldSet.add(lastName, formData); 

    TextField<String> company = new TextField<String>(); 
    company.setFieldLabel("Company"); 
    fieldSet.add(company, formData); 

    TextField<String> email = new TextField<String>(); 
    email.setFieldLabel("Email"); 
    fieldSet.add(email, formData); 

    form2.add(fieldSet); 
    fieldSet = new FieldSet(); 
    fieldSet.setHeading("Phone Numbers"); 
    fieldSet.setCollapsible(true); 

    layout = new FormLayout(); 
    layout.setLabelWidth(75); 
    fieldSet.setLayout(layout); 

    TextField<String> field = new TextField<String>(); 
    field.setFieldLabel("Home"); 
    fieldSet.add(field, formData); 

    field = new TextField<String>(); 
    field.setFieldLabel("Business"); 
    fieldSet.add(field, formData); 

    field = new TextField<String>(); 
    field.setFieldLabel("Mobile"); 
    fieldSet.add(field, formData); 

    field = new TextField<String>(); 
    field.setFieldLabel("Fax"); 
    fieldSet.add(field, formData); 

    form2.add(fieldSet); 
    form2.setButtonAlign(HorizontalAlignment.CENTER); 
    form2.addButton(new Button("Save")); 
    form2.addButton(new Button("Cancel")); 

    vp.add(form2); 
} 

} 

这里是入口点实现类,我要去的地方派:

package kz.bimash.client; 




import com.extjs.gxt.ui.client.widget.Document; 
import com.extjs.gxt.ui.client.widget.MessageBox; 

import com.extjs.gxt.ui.client.widget.form.FieldSet; 
import com.extjs.gxt.ui.client.widget.form.TextField; 
import com.extjs.gxt.ui.client.widget.layout.FlowLayout; 
import com.extjs.gxt.ui.client.widget.layout.FormData; 
import com.extjs.gxt.ui.client.widget.layout.FormLayout; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.extjs.gxt.ui.client.widget.form.FormPanel; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import com.google.gwt.user.client.ui.*; 


public class GWTSample implements EntryPoint { 
private UserServiceAsync prox; 
private HTML label1, button1; 

public void onModuleLoad() { 
    prox = GWT.create(UserService.class); 
    // Window.enableScrolling(false); 
    // Window.setMargin("0px"); 
    Form form = new Form(); 

    form.setVisible(true); 
    Button btn = new Button("Click me!"); 
    // final RootPanel root=RootPanel.get(); 
    final RootLayoutPanel root = RootLayoutPanel.get(); 

    btn.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      prox.getMsq(new AsyncCallback<String>() { 
       @Override 
       public void onFailure(Throwable caught) { 
        //To change body of implemented methods use File | Settings | File Templates. 
       } 

       @Override 
       public void onSuccess(String result) { 

        // MessageBox.info("testing","this is ext gwt",null); 
       } 
      }); 
     } 
    }); 

    TextField<String> tf = (TextField<String>) form.getItemByItemId("firstName"); 
    Label lab = new Label(); 
    //lab.setText(tf.getValue()); 
    // root.add(lab); 
    root.get().add(form); 

    root.get().add(btn); 
    //Document.get().getElementByID() 
} 

} 

当按钮被点击我需要从Texfield retreive值并将其发送到服务器,我如何访问这些值?

回答

1

你为什么不只是让你的Form类的方法?

public class Form extends LayoutContainer { 

    TextField<String> firstName; 

    public String getFirstName(){ 
     return firstName.getValue(); 
    } 
    ... 
} 

然后在onModuleLoad()

public void onModuleLoad() { 
    ... 
    final Form form = new Form(); 

    ... 

    btn.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      String firstName =form.getFirstName(); 
     } 
     ... 
    } 
} 
1

声明您的tf在顶部(全局变量) TextField<String> tf;

以后分配值

tf = (TextField<String>) form.getItemByItemId("firstName"); 

上按钮单击处理程序:

btn.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
     String value =tf.getValue(); 
.......