【问题标题】:GWT Form input field does not have valueGWT 表单输入字段没有值
【发布时间】:2011-11-19 17:56:17
【问题描述】:

我在 GWT 和 HTML 表单方面遇到了一个奇怪的问题。
我制作了一个简单的 FormPanel,其中包含 3 个基本元素:用于上传图像的 FileUpload、用于图像名称的 TextBox 和用于提交的 Button。一切正常(我至少可以保存图像服务器端),除了我在输入字段中输入的任何内容,它都没有值,即在 Chrome 的检查元素中,我清楚地看到它没有 value="..."场地。

为什么会发生这种情况,我该如何解决?如果没有,我无法保存该名称。
编辑:

private final FlowPanel imagePanel = new FlowPanel();
private final FormPanel form = new FormPanel();
private final FileUpload fileUpload = new FileUpload();
private final Button submitButton = new Button("Upload");
private final TextBox fileName = new TextBox();
private final HorizontalPanel hp = new HorizontalPanel();
private final VerticalPanel vp = new VerticalPanel();

public void onModuleLoad()
{
    vp.add(fileUpload);
    hp.add(fileName);
    hp.add(submitButton);
    vp.add(hp);
    form.add(vp);

    form.setEncoding(FormPanel.ENCODING_MULTIPART);
    form.setMethod(FormPanel.METHOD_POST);
    form.setAction("/upload");

    fileUpload.setName("upload"); // image identifier, used in upload handler

    fileName.setName("fileName");
    fileName.setValue("Enter file name");
    fileName.setMaxLength(40);
    fileName.addStyleName("fileNameHint");

    RootPanel.get("uploadBar").add(form);
    RootPanel.get("thumbnails").add(imagePanel);
}

这是除事件处理程序之外的所有布局。在提交上发生的所有事情都是检查 fileUpload 值是否允许文件扩展名。

【问题讨论】:

    标签: forms gwt


    【解决方案1】:

    同样,我的问题的根本原因是我调用 form.reset() 太快了。请注意,输入字段将成为 form.submit() 和 form.reset() 的目标。因此,您的 TextBox 也将作为 form.submit() 发送,如果您调用 reset 它会被清除。

    【讨论】:

      【解决方案2】:

      value 属性定义了节点的defaultValue 属性。设置value 属性(在控件中以编程方式或交互方式)不会更改元素的属性。

      如果您想在 Chrome 的开发者工具中查看元素的当前值,请在“元素”窗格中选择它(如果您使用“检查元素”上下文菜单项,则它已被选中)并在 JavaScript 控制台中输入 $0.value .

      【讨论】:

      • 好的,我可以在开发工具中查看该值,但是如何使该值出现在表单提交中?目前它是 NULL,我不知道为什么会这样,因为 form.onSubmit() 中的 input.getValue() 返回正确的值,但在服务器端它给了我 NULL。
      • 哦,抱歉,您说“一切正常”,所以我以为您只是开发工具有问题。确保您在TextBox 上使用setName,当然它在FormPanel 内。如果您显示构建 UI 的代码会有所帮助。
      • 您必须解析 POST 请求以获取参数,而您将无法使用 request.getParameter... 类型的函数来执行此操作。通常使用 3rd 方库来实现解析,例如雅加达文件上传:jakarta.apache.org/commons/fileupload
      • final List items = upload.parseRequest(request); 循环遍历这个,if (item.getFieldName().equals("fileName") ) - item.getName() == null。我还尝试使用 response.getWriter()Window.alert 打印出每个项目,最后将其全部打印出来,以及 fileName 的值 始终为 NULL,任何地方都没有实际键入的值。
      • 如果我使用GWTUpload并将输入字段添加到SimpleFileUploader Widget中也是一样的。
      猜你喜欢
      • 2016-09-18
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多