我对CQ很新,我正在为现有表单添加新字段。 我想从组件对话框接受日期和时间作为字符串。如果我使用xtype =" datefield"和xtype =" timefield"另外,我可以按照我需要的方式将日期和时间作为字符串。但是,用户界面看起来很糟糕且不具有吸引力,两个单独的字段一个放在另一个之下。
dialog.xml:
<startDate
jcr:primaryType="cq:Widget"
fieldLabel="Event Start Date"
fieldDescription="Select a date "
emptyText="Event start date "
name="./startDate"
format="d/m/Y"
xtype="datefield" />
<startTime
jcr:primaryType="cq:Widget"
fieldLabel="Event Start Time"
fieldDescription="Select a time "
emptyText="Event start time "
name="./startTime"
xtype="timefield" />
控制器中的Java代码:
@Property(path = "startDate")
private String startDate;
@Property(path = "startTime")
private String startTime;
如果我使用xtype =&#34; datetime&#34;,则UI看起来像我喜欢的方式,但该值将转换为UTC为Date字段。
dialog.xml
<startDateTime
jcr:primaryType="cq:Widget"
fieldLabel="Start Date & Time"
name="./startDateTime"
dateFormat="d/m/Y"
xtype="datetime"/>
控制器中的Java代码:
@Property(path = "startDateTime")
private Date startDateTime;
这对我没用,因为我需要将日期和时间作为原始字符串,输入方式。需要获得日期和作为字符串的时间是由要求驱动的,作者应该能够输入事件在特定城市开始和结束的特定日期和时间。因此,作者输入了事件的日期,时间和时区&#39;。我需要在页面上显示日期和时间,还要添加日历链接。 valueAsString选项看起来很有前景但不会将日期和时间作为字符串给出。我怎样才能做到这一点?
先谢谢
更新 使用xtype =&#34;复合字段&#34;由@Sharath建议,我可以实现所需的UI,但遗憾的是,在编辑组件时会保留这些值。这些值是准确输入的,我可以在屏幕上显示它,但是当编辑组件时,字段将返回为空。 java文件没有变化。
更新了dialog.xml:
<items jcr:primaryType="cq:WidgetCollection">
<eStart jcr:primaryType="cq:Widget"
xtype="compositefield"
fieldLabel="Start"
fieldDescription="Select event start date & time">
<items jcr:primaryType="cq:WidgetCollection">
<startDate
jcr:primaryType="cq:Widget"
emptyText="Event start date "
name="./startDate"
format="d/m/Y"
xtype="datefield"
width="240"/>
<startTime
jcr:primaryType="cq:Widget"
emptyText="Event start time "
name="./startTime"
xtype="timefield"
width="180"/>
</items>
</eStart>
*
*
</items>
答案 0 :(得分:1)
有两种方法可以做到这一点:
1)使用compositefield并在其中放置日期和时间字段。 Compositefield在水平行中显示其中的小部件。使用此方法,字段将显示为datetime xtype,但仍将值独立存储为字符串。
2)使用datetime xtype并将值读取为String而不是Date,并将值拆分为“T”。 (我会选1)
我认为我对复合字段错了,它显示并存储了值,但是下次没有读回值(尽管对返回这些值的节点的get请求)
这是另一种选择
{
xtype:"panel",
border:false,
layout:"hbox",
jcr: primaryType:"cq:Widget",
items:{
jcr: primaryType:"cq:WidgetCollection",
label:{
flex:"30",
xtype:"label",
jcr: primaryType:"cq:Widget",
text:"Date Time"
},
datefield:{
flex:"40",
xtype:"datefield",
name:"./date",
jcr: primaryType:"cq:Widget"
},
timefield:{
flex:"30",
xtype:"timefield",
name:"./time",
jcr: primaryType:"cq:Widget"
}
}
}
答案 1 :(得分:1)
我认为日期时间是更容易的选择。使用Date对象,您可以使用http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html以所需格式获取日期。 您可以在对话框和输出中使用相同的格式。
另一个优点是您可以按日期过滤和排序此类型的节点,而不是将值保存为字符串。