日期浏览器问题 - 如果手动更改并专注于它 - 没有保存

时间:2011-02-09 17:12:10

标签: date focus smartgwt

我遇到了与我在smartgwt中使用的日期类型相关的问题。

我设置日期以便可以手动更改它:

setAttribute("useTextField", true); 

在Firefox和Chrome(以及其他浏览器,Internet Explorer除外)中,如果我首先选择带有弹出日历的日期而不是手动更改日期,那么请将焦点放在日期字段上并保存文档(实际上是一个包含多个字段的表单)手动更改的日期将丢失,日历从日历中选择保存。这在Internet Explorer中不会发生。

在所有浏览器中,如果我从日历中选择一个日期而不是手动更改它并从中更改焦点,那么每次操作都会正常 - 手动更改日期会保存到数据库中。 需要一些建议。

非常感谢你。

稍后编辑:

我正在使用com.smartgwt.client.widgets.form.fields.DateItem widget

DateItem date = new DateItem("A date");
date.setWidth(320);
date.setWrapTitle(false);
date.setAttribute("useTextField", true); 
date.setAttribute("inputFormat", "yyyy/MM/dd");
date.setAttribute("displayFormat", "toJapanShortDate");

我在DynamicForm上添加了这个日期:

DynamicForm  form = new DynamicForm();
form.setFields(date);

和VLayout对象上的这个表单:

VLayout editLayout = new VLayout(30);
editLayout.addMember(form);

问题是在Firefox和&amp ;;等浏览器中重现。 Chrome时:

  1. 我首先从日历中选择日期 - 比如我选择2011/02/11
  2. 我正在手动更改2011/02/12的那一天 - 而且我没有更改此日期字段的重点
  3. 我按下了“保存”按钮。
  4. 在这些步骤之后,日期是2011/02/11而不是2011/02/12应该如何。 在Internet Explorer浏览器中没有发生 - 上述步骤之后的日期是2011/02/12!

    稍后修改

    我正在使用DataSource来更新数据。

    我正在使用UserObject并且在userUpdate方法中我首先使用字段中的值创建此用户对象(位于DynamicForm上) - 通过调用{ {1}}方法

    generateUserObjectFromForm()

    在这里,我在做这样的事情: UserObject user = generateUserObjectFromForm(); , 但此处user.setAddedDate(date.getValueAsDate())值是从日历中选择的值,而不是手动修改的值。

    我也尝试过:

    date.getValueAsDate()

    但没有一个正常工作。

    我正在使用请求对象(date.getValue() //Fri Feb 11 00:00:00 GMT+200 2011 date.getValueField() // null date.getValueAsDate() //Fri Feb 11 00:00:00 GMT+200 2011 date.getDisplayField() //null date.getDisplayValue()//l2011/02/11 )来更新用户。

    UserUpdateRequest看起来像:


    UserUpdateRequest

    public class UserUpdateRequest implements IsSerializable
    {
        UserObject user = null;
    
        public UserUpdateRequest ()
        {
        }
    
        public UserUpdateRequest (UserObject user)
        {
            this.user = user;
        }
    
        public UserObject getUser ()
        {
            return user;
        }
    }
    

    并且在RPC用户更新方法上我发送了这个final UserUpdateRequest request = new UserUpdateRequest(user); 请求。

    稍后编辑(2月15日):

    我发现为什么会发生与焦点相关的问题,这是因为在项目中我没有使用UserUpdateRequest对象 - 而Button就是这样。我正在使用个性化小部件:

    com.google.gwt.event.dom.client.ClickEvent

    并使用package de.vogella.gwt.helloworld.client; import com.smartgwt.client.widgets.Label; public class buttonLabel extends Label { public buttonLabel (String text, String elementID) { super(); setContents(text); setAutoWidth(); setBaseStyle("wwHoverLabel"); setShowRollOver(true); } }

    无论如何我不知道如何解决这个问题....

    我已经创建了一个包含此问题的小项目,其中我还添加了com.smartgwt.client.widgets.events.ClickHandler()对象(Button)以及个性化按钮Save1(Save2) - 两者都带有{ {1}}。

    以下是您可以下载我创建的这个小项目的来源的链接:link

    情况1: 例如我们选择日期2011/02/16并且我们手动将日期更改为2011/02/17并按下按钮buttonLabel - 一切正常 - 日期仍为2011/02/17

    Case2-a - line clickhandlers未评论: 例如我们选择日期2011/02/16并且我们手动将日期更改为2011/02/17并按下按钮Save1 - 在警告消息中日期值为2011/02/16但是在字段日期仍然是2011/02/17

    案例2-b - 行 Window.alert("2 " + date.getValue());取消注释: 例如我们选择日期2011/02/16,我们手动将日期更改为2011/02/17并按下按钮Save2 - 字段日期的值自动更改为2011/02/16

    稍后编辑:

    由于我无法弄清楚如何解决我的问题,我正在考虑暂时的解决方案。 所以,我有:

    Window.alert("2 " + date.getValue());

    由于属性Save2设置为DateItem date = new DateItem("Adate"); date.setWidth(120); date.setWrapTitle(false); date.setAttribute("useTextField", true); date.setAttribute("inputFormat", "yyyy/MM/dd"); date.setAttribute("displayFormat", "toJapanShortDate"); ,我们可以看到文字输入字段。如何使此文本输入字段不可编辑。实际上我想只能从日历中选择日期而不是手动更改日期。

1 个答案:

答案 0 :(得分:0)

以下代码应该有效。

DateItem date = new DateItem("Adate"); 
date.setAttribute("useTextField", true); 
date.setAttribute("inputFormat", "yyyy/MM/dd"); 
date.setAttribute("displayFormat", "toJapanShortDate"); 
TextItem textItem = new TextItem(); 
textItem.setAttribute("readOnly", "true"); 
date.setTextFieldProperties(textItem);