5

我想我只是在做一些愚蠢的事情,但我无法弄清楚这一点。

我正在使用 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();
        }


    }

}

4

1 回答 1

5
sendButton.setEnabled(true);

enabled您在方法结束时再次拥有您的按钮onClick()..查看您的点击处理程序..这可能是问题..

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

@Override
public void onSuccess(String result) {
    processXML(result);
    sendButton.setEnabled(true);
}
于 2012-10-11T15:53:16.470 回答