私はただ愚かなことをしていると思いますが、これを理解することはできません。
私はGWTを使用しており、送信ボタンがあり、送信によってRESTAPIを介してリモートサーバーに情報が送信されます。問題は、操作の完了中に[送信]を複数回クリックすると、複数の投稿が行われることです。
追加してみました
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();
}
}
}