[MAGNOLIA-3454] Date control not working Created: 07/Dec/10 Updated: 22/Dec/10 Resolved: 08/Dec/10 |
|
| Status: | Closed |
| Project: | Magnolia |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major |
| Reporter: | Richard Unger | Assignee: | Philipp Bärfuss |
| Resolution: | Not an issue | Votes: | 0 |
| Labels: | datecontrol | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Java 1.6.21, Magnolia EE Bundle on Tomcat 5.5.27 or 5.5.30 |
||
| Template: |
|
| Acceptance criteria: |
Empty
|
| Task DoD: |
[ ]*
Doc/release notes changes? Comment present?
[ ]*
Downstream builds green?
[ ]*
Solution information and context easily available?
[ ]*
Tests
[ ]*
FixVersion filled and not yet released
[ ] 
Architecture Decision Record (ADR)
|
| Bug DoR: |
[ ]*
Steps to reproduce, expected, and actual results filled
[ ]*
Affected version filled
|
| Date of First Response: |
| Description |
|
The Date control (DialogDate) is not working. The control can be used, dialogs using the control can be opened when creating a new paragraph. The problem is that JackRabbit throws an exception (related to the date format) when trying to read the date via Property.getDate() (called by NodeData.getDate()). See the attached stack trace below. So it would appear that magnolia is somehow saving a value to JCR which can then not be read. 2010-12-03 12:59:12,061 ERROR lina].[localhost].[/at.bmlfuw.cmsauthor].[default]: Servlet.service() for servlet default threw exception java.lang.RuntimeException: Can't read value of nodedata website:/jdw/aktuelles/veranstaltungen/event-name/veranstaltung/startdate[String] at info.magnolia.cms.core.DefaultNodeData.getDate(DefaultNodeData.java:164) at info.magnolia.cms.gui.dialog.DialogDate.doBeforeDrawHtml(DialogDate.java:98) at info.magnolia.cms.gui.dialog.DialogEditWithButton.drawHtml(DialogEditWithButton.java:89) at info.magnolia.cms.gui.dialog.DialogControlImpl.drawSubs(DialogControlImpl.java:321) at info.magnolia.cms.gui.dialog.DialogControlImpl.drawHtml(DialogControlImpl.java:165) at info.magnolia.cms.gui.dialog.DialogControlImpl.drawSubs(DialogControlImpl.java:321) at info.magnolia.cms.gui.dialog.DialogControlImpl.drawHtml(DialogControlImpl.java:165) at info.magnolia.module.admininterface.DialogMVCHandler.renderHtml(DialogMVCHandler.java:417) at info.magnolia.module.admininterface.dialogs.ParagraphEditDialog.renderHtml(ParagraphEditDialog.java:102) at info.magnolia.cms.servlets.MVCServlet.doPost(MVCServlet.java:124) at info.magnolia.cms.servlets.MVCServlet.doGet(MVCServlet.java:69) at javax.servlet.http.HttpServlet.service(HttpServlet.java:627) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:183) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:133) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:57) at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:122) at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:75) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.module.extendedtemplatingkit.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:94) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:83) at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:64) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:88) at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:77) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:51) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:84) at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:88) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:102) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:117) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82) at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64) at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:70) at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:199) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Unknown Source) Caused by: javax.jcr.ValueFormatException: not a valid date format at org.apache.jackrabbit.value.BaseValue.getDate(BaseValue.java:131) at org.apache.jackrabbit.core.PropertyImpl.getDate(PropertyImpl.java:510) at info.magnolia.cms.core.DefaultNodeData.getDate(DefaultNodeData.java:161) ... 79 more |
| Comments |
| Comment by Richard Unger [ 07/Dec/10 ] |
|
As an aside, it seems that JCR's getDate() cannot easily be configured to use different date formats. Given the fact that DialogDate (date control) might be used in a variety of ways by your customers, I think it is dangerous/complicated to rely on JCR's underlying date datatype. Instead I would prefer to see a solution where DialogDate always stores it's date as a String in JCR. The handling of formats and String<->Date conversions could then be done entirely withing magnolia in a JCR-independant and flexible way. For example: DialogDate could add a new config-option "format" whích can hold a java-date-format string. If set, DialogDate would convert the String JCR value according to the supplied format. What do you think? |
| Comment by Philipp Bärfuss [ 08/Dec/10 ] |
|
you have to set the type to Date and the value will be saved as a Date/Calendar |
| Comment by Richard Unger [ 21/Dec/10 ] |
|
Hi - thanks for pointing that out - I feel a bit stupid. This hint solved our problem. I still have 2 comments about this though: 1, It would be good to mention this in the documentation, under "http://documentation.magnolia-cms.com/reference/controls.html#date" - we actually checked the documentation there, but of course did not find the answer to our problem. 2. If it is possible to save a date value to a string property via DialogDate, then it should also be possible to read the value from a string property. The current situation is confusing - either throw an exception right away, on saving, or allow loading the value from a string (perhaps using a configurable format, as suggested in my comment above). But permitting the save and then failing on load is inconsistent. Thanks again for pointing out our error though! Regards from Vienna, Richard Unger |
| Comment by Philipp Bärfuss [ 22/Dec/10 ] |
|
Thanks, I created the documentation change request: In Magnolia 5.0 we will have a dialog editor and the so called configuration UI which will have some basic knowledge about such constraints. We know that one currently runs to easily into such situations and that it can be very time consuming (debugging) to find out why certain configurations don't work. Even if the solution finally seams to be quite obviously. |