I think I'm just doing something stupid, but I can't figure it out.
I use GWT and I have a submit button where submit sends some information to the remote server via the REST API. The problem is that you can press the button several times until the operation completes and several messages are generated.
I tried to add
sendButton.setEnabled(false);
for the click handler, but it doesn't seem to work. The button remains on, and I can still click it as many times as I want to receive several messages. Can anyone see what I'm doing wrong? Full code below.
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 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(); } }
}
source share