简体   繁体   English

按钮:setEnabled(false)不起作用?

[英]Button: setEnabled(false) not working?

I think I am just doing something stupid but I can't figure this one out. 我想我只是做了一些愚蠢的事情,但我无法想出这个。

I am using GWT, and I have a submit button where submit sends some information to a remote server via a REST API. 我正在使用GWT,并且我有一个提交按钮,其中submit通过REST API将一些信息发送到远程服务器。 The problem is, you can click submit multiple times while the operation is completing, and multiple posts are made. 问题是,您可以在操作完成时单击提交多次,并创建多个帖子。

I have tried adding 我试过添加

 sendButton.setEnabled(false);

to the click handler, but it does not seem to be working. 到点击处理程序,但它似乎没有工作。 The button remains enabled and I can still click it as many times as I want resulting in multiple posts. 该按钮保持启用状态,我仍然可以根据需要多次点击该按钮,从而产生多个帖子。 Can someone see what I am doing wrong? 有人能看出我做错了吗? Complete 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'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();
        }


    }

} }

sendButton.setEnabled(true);

You have enabled your button again at the end of the onClick() method.. See your click handler.. This might be the problem.. 你已经在onClick()方法的末尾再次enabled你的按钮..看你的点击处理程序..这可能是问题..

Try moving this line inside onSuccess() method: - 尝试在onSuccess()方法中移动这一行: -

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM