我正在寻找一种方法来为我正在处理的网络应用程序的用户输入任务的“计划”,并将其用于我的UI中的多个页面。
我正在寻找能让我配置是手动触发,每月/每周/每天/每小时运行等等的内容,然后根据配置的频率显示子字段,例如每月的每月日期+时间,每周的一天+一天的时间,每天的时间,等等。
我原以为我可以使用多个选择字段,并且当所选频率指示我不需要时,使用Javascript来隐藏/显示相应的子字段。但是,由于我想在多个页面上使用它,如果有更好的方法,我不想在页面之间复制一堆东西。
在内部,它可能会转换为crontab格式并使用Spring进行调度,但我不想在文本框中显示crontab格式,因为它缺乏用户友好性。
有人有什么建议吗?我正在使用Struts 2作为用户界面,而且我没有使用任何Javascript库。不确定这是否类似jQuery会变得容易,或者是什么。
感谢。
答案 0 :(得分:1)
jQuery是一个选项,因为它使事件处理在浏览器中保持一致,但是,编写一个简单的函数,它以简洁的方式在所有浏览器中执行它也是相当微不足道的,所以对于这个小部件,我不建议创建一个依赖于jQuery。
哦,并将输入类型视为具有良好公共接口的小部件或组件,您可以将其实例化并嵌入任何需要它的页面中。看看像Google日历这样的大多数网络日历解决方案如何实现它,因为他们也需要考虑周期性事件,并且仍然让最终用户保持简单。他们可以解决UI问题,即获得非常复杂的重复时间,例如:
以最简单的方式为最终用户。以下是一些例子:
每年重复一次自定义步长
alt text http://img17.imageshack.us/img17/8122/picture1be.png
每月重复一次,并在每月的某一天使用自定义步长
alt text http://img706.imageshack.us/img706/8036/picture2so.png
使用包含小部件的自包含脚本文件,假设您可以在需要它的每个页面上引用ScheduleWidget.js
,或者它可以捆绑在缩小/打包的脚本中,因此所有页面都可以访问它。
保持界面简单,因此只需很少的努力就可以将其插入到任何DOM元素中。
var widget = new ScheduleWidget();
var container = document.getElementById("scheduleContainer");
// getElement() returns the root DOM node of the dynamically constructed widget.
container.appendChild(widget.getElement());
当ScheduleWidget
对象被实例化时,它会设置所有事件绑定,因此列表选择,更改等会根据需要触发逻辑/ UI的更改。
答案 1 :(得分:0)
好的,所以我最终使用了Struts 2组件标记,只是将参数传递给它以生成具有不同名称的相应代码。这对我来说是最好的,因为使用它我仍然能够嵌套Struts 2标签,我不确定我是否能够通过定义我自己的taglib来做到这一点。
答案 2 :(得分:0)
我一直在寻找这个问题的答案。
我认为谷歌日历是如何做得好的一个很好的例子,我认为某些JQuery插件或其他javascript库仍然有很好的机会。
对于任何给定的Web应用程序,GUI很少需要能够在crontab中创建每个条目。例如,谷歌日历有一系列令人印象深刻的日程安排选项,但仍然不支持“从现在开始每隔一分钟”......
对于我现在正在使用的网络应用程序,超过“每月”的任何内容都太长,“每日”下的任何内容也无法正常工作我只想拥有以下选项
daily options
daily
once every two, three or four days
weekly options
A set number of times per week (like:once, twice, etc)
weekly on a schedule (like: Tues, Thurs, and Sat)
monthly options
A set number of times per month (like: four, five, six)
monthly on a schedule (like: 1st, 7th, 13th, and 21st)
monthly on a weekly schedule (like: 1st Tuesday, 2nd Wednesday, Last Friday)
但我觉得很明显,我想要的只是一个较大的调度频率系统的一个子集,包括每小时,“每分钟”,每年和每年+选项
我将进一步探索javascript显示/隐藏选项,并会在我完成这些操作时尝试进一步扩展此答案。