2012-10-11 168 views
4

我想我只是在做一些愚蠢的事情,但我无法弄清楚这一点。按钮:setEnabled(false)不工作?

我正在使用GWT,并且我有一个提交按钮,其中提交通过REST API向远程服务器发送一些信息。问题在于,您可以在操作完成时单击多次提交,并创建多个帖子。

我曾尝试加入

sendButton.setEnabled(false); 

到单击处理程序,但它似乎并不奏效。该按钮保持启用状态,并且我仍然可以多次单击它,并根据需要生成多个帖子。有人可以看到我做错了什么吗?完整的代码如下。

public class HelpDeskTest implements EntryPoint { 
private final HelpDeskTestServiceAsync helpDeskTest= GWT.create (HelpDeskTestService.class); 

final Button sendButton = new Button("Submit"); 
final TextBox nameField = new TextBox(); 
final Label errorLabel = new Label(); 
final TextBox subjectField = new TextBox(); 
final TextArea descriptionField= new TextArea(); 


/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 


    // We can add style names to widgets 
    //sendButton.addStyleName("sendButton"); 

    // Add the nameField and sendButton to the RootPanel 
    // Use RootPanel.get() to get the entire body element 
    RootPanel.get("nameFieldContainer").add(nameField); 
    RootPanel.get("subjectFieldContainer").add(subjectField); 
    RootPanel.get("descriptionFieldContainer").add(descriptionField); 
    RootPanel.get("sendButtonContainer").add(sendButton); 
    RootPanel.get("errorLabelContainer").add(errorLabel); 

    //set name field text 
    nameField.setText("GWT User"); 

    // Focus the cursor on the name field when the app loads 
    subjectField.setFocus(true); 
    subjectField.selectAll(); 


    //set widths and heights 
    descriptionField.setWidth("100%"); 
    descriptionField.setHeight("200px"); 
    nameField.setWidth("100%"); 
    subjectField.setWidth("100%"); 


    //click handler 
    sendButton.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 

      sendButton.setEnabled(false); 

      String uName = nameField.getText(); 
      String subject = subjectField.getText(); 
      String desc = descriptionField.getText(); 

      String newURLp1 = "http://xxx.xx.xx/sdpapi/request?" + 
        "OPERATION_NAME=ADD_REQUEST&TECHNICIAN_KEY=D4xxxxxxxB6" + 
        "&INPUT_DATA=<?xml version="; 
      String urlp2 = "%221.0%22"; 
      String urlp3 = " encoding="; 
      String urlp4 = "%22utf-8%22"; 
      String urlp5 = "?><Operation><Details><requester>" + uName + "</requester><subject>" + subject + 
      "</subject><description>" + desc + "</description></Details></Operation>"; 

      String encUrl = URL.encode(newURLp1) + urlp2 + URL.encode(urlp3) + urlp4 + URL.encode(urlp5); 
      System.out.println(encUrl); 

      helpDeskTest.postToRemoteServer(encUrl, 
        new AsyncCallback<String>() { 
         @Override 
         public void onFailure(Throwable caught) { 
          Window.alert("Failure getting XML through proxy"); 
         } 

         @Override 
         public void onSuccess(String result) { 
          processXML(result); 
         } 


        }); 
      sendButton.setEnabled(true); 
     } 
    }); 

} 

    public void processXML(final String xml) { 

     try { 

      Document doc = XMLParser.parse(xml); 

      // get the status using Node's getNodeValue() function - this will determine success or failure. 
      String status = doc.getElementsByTagName("status").item(0).getFirstChild().getNodeValue(); 

      //if success: 
      if (status.equals("Success")) { 

       String statCode = doc.getElementsByTagName("statuscode").item(0).getFirstChild().getNodeValue(); 
       String msg = doc.getElementsByTagName("message").item(0).getFirstChild().getNodeValue(); 
       String woid = doc.getElementsByTagName("workorderid").item(0).getFirstChild().getNodeValue(); 

       System.out.println("Result from HelpDesk:"); 
       System.out.println("Status Code: " + statCode); 
       System.out.println("Status: " + status); 
       System.out.println(msg); 

       System.out.println(msg + ". Ticket Number is: " + woid); 

       errorLabel.setText(msg + ". Ticket Number is: " + woid); 

      } else if (status.equals("Failed")){ 
       //get message 
       String failmsg = doc.getElementsByTagName("message").item(0).getFirstChild().getNodeValue(); 
       errorLabel.setText(failmsg); 

      } 


     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

}

+0

你enabl在任务完成后,再次执行'sendButton'。你确定这个按钮在执行过程中没有被禁用吗? – Baz

回答

3
sendButton.setEnabled(true); 

您在onClick()方法到底有再次enabled你的按钮..请参阅您单击处理.. 这可能是问题..

尝试移动这条线内onSuccess()方法: -

@Override 
public void onSuccess(String result) { 
    processXML(result); 
    sendButton.setEnabled(true); 
} 
+1

为什么你总是用“..”而不是“。”? – Baz

+0

@Baz。哈比人:)我的手对我很残酷。或者说他们现在失控了。 :P –

+0

这样做。谢谢! – brl8