我遇到了与我在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时:
在这些步骤之后,日期是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");
,我们可以看到文字输入字段。如何使此文本输入字段不可编辑。实际上我想只能从日历中选择日期而不是手动更改日期。
答案 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);