Patrick- >From my experience dojo errors usually are manifested by <css/js/ftl> missing >or inacessible
If you can attach a sample testcase in JIRA at https://issues.apache.org/jira/i#browse/WW-4317 we will followup for you Also I took a quick scan of the most recent template/simple folder Directory of $STRUTS2_HOME/core/target/classes/template/simple 04/07/2014 02:04 PM <DIR> . 04/07/2014 02:04 PM <DIR> .. 04/07/2014 02:04 PM 1,593 a-close.ftl 04/07/2014 02:04 PM 826 a.ftl 04/07/2014 02:04 PM 1,374 actionerror.ftl 04/07/2014 02:04 PM 1,412 actionmessage.ftl 04/07/2014 02:04 PM 1,948 checkbox.ftl 04/07/2014 02:04 PM 4,009 checkboxlist.ftl 04/07/2014 02:04 PM 3,614 combobox.ftl 04/07/2014 02:04 PM 905 common-attributes.ftl 04/07/2014 02:04 PM 827 controlfooter.ftl 04/07/2014 02:04 PM 827 controlheader.ftl 04/07/2014 02:04 PM 1,607 css.ftl 04/07/2014 02:04 PM 3,021 debug.ftl 04/07/2014 02:04 PM 833 div-close.ftl 04/07/2014 02:04 PM 1,459 div.ftl 04/07/2014 02:04 PM 7,952 doubleselect.ftl 04/07/2014 02:04 PM 1,277 dynamic-attributes.ftl 04/07/2014 02:04 PM 827 empty.ftl 04/07/2014 02:04 PM 3,411 fielderror.ftl 04/07/2014 02:04 PM 1,715 file.ftl 04/07/2014 02:04 PM 4,441 form-close.ftl 04/07/2014 02:04 PM 2,173 form-common.ftl 04/07/2014 02:04 PM 991 form.ftl 04/07/2014 02:04 PM 897 head.ftl 04/07/2014 02:04 PM 1,386 hidden.ftl 04/07/2014 02:04 PM 4,308 inputtransferselect.ftl 04/07/2014 02:04 PM 1,480 label.ftl 04/07/2014 02:04 PM 1,889 optgroup.ftl 04/07/2014 02:04 PM 14,417 optiontransferselect.ftl 04/07/2014 02:04 PM 1,924 password.ftl 04/07/2014 02:04 PM 3,313 radiomap.ftl 04/07/2014 02:04 PM 2,622 reset.ftl 04/07/2014 02:04 PM 1,996 scripting-events.ftl 04/07/2014 02:04 PM 5,145 select.ftl 04/07/2014 02:04 PM 254 submit-close.ftl 04/07/2014 02:04 PM 2,944 submit.ftl 04/07/2014 02:04 PM 2,820 table.ftl 04/07/2014 02:04 PM 1,905 text.ftl 04/07/2014 02:04 PM 1,879 textarea.ftl 04/07/2014 02:04 PM 1,049 token.ftl 04/07/2014 02:04 PM 2,816 updownselect.ftl $STRUTS2_HOME/core/target/classes/template/simple>ls -a *date*.ftl Here is the tld for datetimepicker (which currently does not have theme attribute) <tag> <description><![CDATA[Render datetimepicker]]></description> <name>datetimepicker</name> <tag-class>org.apache.struts2.dojo.views.jsp.ui.DateTimePickerTag</tag-class> <body-content>JSP</body-content> <attribute> <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description> <name>accesskey</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[If true, weekly size of calendar changes to acomodate the month if false, 42 day format is used]]></description> <name>adjustWeeks</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The css class to use for element]]></description> <name>cssClass</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The css error class to use for element]]></description> <name>cssErrorClass</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The css error style definitions for element to use]]></description> <name>cssErrorStyle</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The css style definitions for element to use]]></description> <name>cssStyle</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[How to render the names of the days in the header(narrow, abbr or wide)]]></description> <name>dayWidth</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html disabled attribute on rendered html element]]></description> <name>disabled</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[A pattern used for the visual display of the formatted date, e.g. dd/MM/yyyy]]></description> <name>displayFormat</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Total weeks to display]]></description> <name>displayWeeks</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Last available date in the calendar set]]></description> <name>endDate</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Define error position of form element (top|bottom)]]></description> <name>errorPosition</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Type of formatting used for visual display. Possible values are long, short, medium or full]]></description> <name>formatLength</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Path to icon used for the dropdown]]></description> <name>iconPath</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[HTML id attribute]]></description> <name>id</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Use JavaScript to generate tooltips]]></description> <name>javascriptTooltip</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the key (name, value, label) for this particular component]]></description> <name>key</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Label expression used for rendering an element specific label]]></description> <name>label</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[String that will be appended to the label]]></description> <name>labelSeparator</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Define label position of form element (top/left)]]></description> <name>labelposition</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Language to display this widget in]]></description> <name>language</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The name to set for element]]></description> <name>name</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[ Set the html onblur attribute on rendered html element]]></description> <name>onblur</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onchange attribute on rendered html element]]></description> <name>onchange</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onclick attribute on rendered html element]]></description> <name>onclick</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description> <name>ondblclick</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description> <name>onfocus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description> <name>onkeydown</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description> <name>onkeypress</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description> <name>onkeyup</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description> <name>onmousedown</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description> <name>onmousemove</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description> <name>onmouseout</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description> <name>onmouseover</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description> <name>onmouseup</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html onselect attribute on rendered html element]]></description> <name>onselect</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[If set to true, the rendered element will indicate that input is required]]></description> <name>requiredLabel</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Define required position of required form element (left|right)]]></description> <name>requiredPosition</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[First available date in the calendar set]]></description> <name>startDate</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Disable all incremental controls, must pick a date in the current display]]></description> <name>staticDisplay</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description> <name>tabindex</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The template (other than default) to use for rendering the element]]></description> <name>template</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Template css path]]></description> <name>templateCssPath</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[The template directory.]]></description> <name>templateDir</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the html title attribute on rendered html element]]></description> <name>title</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Duration of toggle in milliseconds]]></description> <name>toggleDuration</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[oggle type of the dropdown. Possible values are plain,wipe,explode,fade]]></description> <name>toggleType</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Set the tooltip of this particular component]]></description> <name>tooltip</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Deprecated. Use individual tooltip configuration attributes instead.]]></description> <name>tooltipConfig</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[CSS class applied to JavaScrip tooltips]]></description> <name>tooltipCssClass</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Delay in milliseconds, before showing JavaScript tooltips ]]></description> <name>tooltipDelay</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Icon path used for image that will have the tooltip]]></description> <name>tooltipIconPath</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Defines the type of the picker on the dropdown. Possible values are 'date' for a DateTimePicker, and 'time' for a timePicker]]></description> <name>type</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Preset the value of input element]]></description> <name>value</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Comma delimmited list of topics that will published when a value is selected]]></description> <name>valueNotifyTopics</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description><![CDATA[Adjusts the first day of the week 0==Sunday..6==Saturday]]></description> <name>weekStartsOn</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <dynamic-attributes>false</dynamic-attributes> </tag> i currently dont see a theme attribute in my tld for datetimepicker (i do see theme attribute for div and textarea but not datetimepicker) Looking forward to seeing your testcase Martin > Date: Tue, 8 Apr 2014 07:17:33 +1000 > From: patrick.ke...@riverdynamics.com > To: user@struts.apache.org > Subject: Re: datetimepicker used in conjunction with theme=simple form > > Hi Lukasz, I am currently using version 2.3.15.3 not 2.3.16. So it > sounds like the bug exists in both versions. > > Is there an earlier version I could drop back to just to complete my > migration process testing where you would expect it to work? > > OR should I contemplate swapping over to the jquery plug-in (which is > new to me). Is that supposed to do everything that dojo does like date > widget and support for div tags & event publish & subscribe? > > Regards - Patrick > > Patrick Kelly > > PatrickKelly > PrincipalConsultant > *River**Dynamics* > > E: patrick.ke...@riverdynamics.com <mailto:patrick.ke...@riverdynamics.com> > W: www.riverdynamics.com <http://www.riverdynamics.com/> > > On 8/04/2014 3:56 AM, Lukasz Lenart wrote: > > Right, Dojo plugin is a strange beast ;-) Looks like you found a bug, > > please register an issue in JIRA. It works in Struts 2.3.15.3 but it's > > broken in 2.3.16 > > > > 2014-04-07 12:36 GMT+02:00 Patrick Kelly <patrick.ke...@riverdynamics.com>: > >> If I include theme="dojo" on the sx:datetimepicker it throws an error > >> "Attribute theme invalid for tag datetimepicker according to tld" > >> > >> Patrick Kelly > >> > >> PatrickKelly > >> PrincipalConsultant > >> *River**Dynamics* > >> > >> E: patrick.ke...@riverdynamics.com <mailto:patrick.ke...@riverdynamics.com> > >> W: www.riverdynamics.com <http://www.riverdynamics.com/> > >> > >> On 7/04/2014 7:47 PM, Lukasz Lenart wrote: > >>> Define theme in <sx:datetimepicker/> as it now inherits that from <s:form> > >>> tag, > >>> > >>> <sx:datetimepicker theme="dojo" .../> > >>> > >>> 2014-04-07 11:42 GMT+02:00 Patrick Kelly > >>> <patrick.ke...@riverdynamics.com>: > >>>> yes I have the sx:head tag - and no I can't see any javascript errors in > >>>> Firebug. > >>>> > >>>> Patrick Kelly > >>>> > >>>> PatrickKelly > >>>> PrincipalConsultant > >>>> *River**Dynamics* > >>>> > >>>> E: patrick.ke...@riverdynamics.com > >>>> <mailto:patrick.ke...@riverdynamics.com> > >>>> W: www.riverdynamics.com <http://www.riverdynamics.com/> > >>>> > >>>> On 7/04/2014 7:05 PM, Lukasz Lenart wrote: > >>>>> Do you have <sx:head/> tag in your jsp? Do you see any JavaScript > >>>>> errors? > >>>>> > >>>>> 2014-04-07 10:03 GMT+02:00 Patrick Kelly > >>>>> <patrick.ke...@riverdynamics.com>: > >>>>>> Hi, I am head butting a virtual brick wall trying to get the > >>>>>> datetimepicker > >>>>>> dojo widget to work with a theme=simple form. > >>>>>> > >>>>>> I am in the middle of upgrading a webwork app to struts2 2.3.15.3. The > >>>>>> good > >>>>>> news is that datetimepicker works just like I would expect it in > >>>>>> hundreds > >>>>>> of > >>>>>> places across the migrated application but only if the form is > >>>>>> theme=xhtml. > >>>>>> However if the form is simple (which it is in this case), then what > >>>>>> used > >>>>>> to > >>>>>> work "auto magically" in webwork seems a little more troublesome in > >>>>>> struts > >>>>>> 2. There is some critical step I am missing but am yet to figure it > >>>>>> out. > >>>>>> > >>>>>> This is what I am doing. The page uses an iterator to populate a list > >>>>>> (of > >>>>>> invoice items under an invoice) and then allows the user to edit any > >>>>>> item > >>>>>> in > >>>>>> the list by clicking an "Edit" link that appears for each item in the > >>>>>> list. > >>>>>> > >>>>>> The <td> cell for the "Edit" link looks like: > >>>>>> > >>>>>> <td class="evenRow"> > >>>>>> <a <%=linkmouseover%> href="javascript:editInvoiceItem('<s:property > >>>>>> value="id"/>', '<s:property escape="false" value="providerHtml"/>', > >>>>>> '<s:property value="createDate"/>', '<s:property > >>>>>> value="serviceCode"/>', > >>>>>> '<s:property escape="false" value="serviceDescriptionHtml"/>', > >>>>>> '<s:property > >>>>>> value="units"/>', '<s:property value="cost"/>', '<s:property > >>>>>> value="gstApplies"/>', '<s:property value="taxInclusive"/>');">Edit</a> > >>>>>> </td> > >>>>>> > >>>>>> And the javascript editInvoiceItem that gets called looks like: > >>>>>> > >>>>>> function editInvoiceItem(id, provider, createDate, serviceCode, > >>>>>> serviceDescription, units, cost, gstApplies, taxInclusive) { > >>>>>> document.getElementById("invItemId").value = id; > >>>>>> document.getElementById("provider").value = provider; > >>>>>> document.getElementById("createDate").value = createDate; > >>>>>> document.getElementById("code").value = serviceCode; > >>>>>> document.getElementById("desc").value = serviceDescription; > >>>>>> document.getElementById("units").value = units; > >>>>>> document.getElementById("cost").value = cost; > >>>>>> document.getElementById("gstApplies").value = gstApplies; > >>>>>> document.getElementById("taxInclusive").value = taxInclusive; > >>>>>> units=units.replace(/\$|\,/g,''); > >>>>>> cost=cost.replace(/\$|\,/g,''); > >>>>>> calculateLineItem(); > >>>>>> } > >>>>>> > >>>>>> And the theme=simple form that is auto populated when the user clicks > >>>>>> "Edit" > >>>>>> looks like... > >>>>>> > >>>>>> <s:form theme="simple" id="itemAdd" name="itemAdd" action="invoice" > >>>>>> method="post"> > >>>>>> <s:hidden name="cmd" value="addItem" /> > >>>>>> <s:hidden name="objType" /> > >>>>>> <s:hidden name="objId" /> > >>>>>> <s:hidden name="model" /> > >>>>>> <s:hidden name="invId" value="%{invoice.id}" /> > >>>>>> <s:hidden name="invoice.thirdPartyName" /> > >>>>>> <s:hidden name="invoice.thirdPartyAddress" /> > >>>>>> <s:hidden name="invoiceItem.id" id="invItemId"/> > >>>>>> <s:hidden name="invoiceItem.provider" id="provider" > >>>>>> value="addItem"/> > >>>>>> <s:hidden name="role" /> > >>>>>> <tr> > >>>>>> <td class="evenRow"><sx:datetimepicker id="createDate" > >>>>>> displayFormat="%{getText('dateFormat')}" name="invoiceItem.createDate" > >>>>>> /></td> > >>>>>> <td class="evenRow"><s:select id="code" emptyOption="true" > >>>>>> name="invoiceItem.serviceCode" list="invoiceCodes"/></td> > >>>>>> <td class="evenRow"><s:textfield id="desc" size="20" > >>>>>> name="invoiceItem.serviceDescription"/></td> > >>>>>> <td class="evenRow"><s:textfield onchange="calculateLineItem()" > >>>>>> id="units" > >>>>>> size="4" name="invoiceItem.units"/></td> > >>>>>> <td class="evenRow"><s:textfield onchange="calculateLineItem()" > >>>>>> id="cost" > >>>>>> size="6" name="invoiceItem.cost"/></td> > >>>>>> <td class="evenRow"><s:textfield id="gst" size="4" readonly="true" > >>>>>> name="invoiceItem.gst"/></td> > >>>>>> <td class="evenRow"><s:textfield id="total" size="6" > >>>>>> readonly="true" > >>>>>> name="invoiceItem.total"/></td> > >>>>>> <td class="evenRow"><s:select onchange="calculateLineItem()" > >>>>>> name="invoiceItem.gstApplies" id="gstApplies" > >>>>>> emptyOption="false" > >>>>>> list="#{'Yes':'Yes', 'No':'No'}"/></td> > >>>>>> <td class="evenRow"><s:select onchange="calculateLineItem()" > >>>>>> name="invoiceItem.taxInclusive" id="taxInclusive" > >>>>>> emptyOption="false" > >>>>>> list="#{'No':'No', 'Yes':'Yes'}"/></td> > >>>>>> <td class="evenRow"> </td> > >>>>>> <td class="evenRow"><s:submit theme="simple" align="left" > >>>>>> value="Save" > >>>>>> /></td> > >>>>>> </tr> > >>>>>> </s:form> > >>>>>> > >>>>>> There are 2 problems: > >>>>>> - the field "createDate" is not populated when the user clicks the > >>>>>> "Edit" > >>>>>> link (while all the other non-date fields referenced in the javascript > >>>>>> are) > >>>>>> - and if I manually enter a new date via the datetimepicker widget and > >>>>>> click > >>>>>> a button to save the updated invoice item data, then I get a validation > >>>>>> error saying the "createDate" field is missing > >>>>>> > >>>>>> So it looks like there is some extra getter/setter logic that is > >>>>>> required > >>>>>> for a datetimepicker in theme=simple mode that is needed for any of the > >>>>>> other non-date fields and wasn't needed in webwork (probably because it > >>>>>> used > >>>>>> a different date widget). > >>>>>> > >>>>>> Here's hoping someone can point me in the right direction. > >>>>>> > >>>>>> Regards - Patrick > >>>>>> > >>>>>> -- > >>>>>> Patrick Kelly > >>>>>> > >>>>>> PatrickKelly > >>>>>> PrincipalConsultant > >>>>>> *River**Dynamics* > >>>>>> > >>>>>> E: patrick.ke...@riverdynamics.com > >>>>>> <mailto:patrick.ke...@riverdynamics.com> > >>>>>> W: www.riverdynamics.com <http://www.riverdynamics.com/> > >>>>>> > >>>>> --------------------------------------------------------------------- > >>>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > >>>>> For additional commands, e-mail: user-h...@struts.apache.org > >>>>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > >>> For additional commands, e-mail: user-h...@struts.apache.org > >>> > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > For additional commands, e-mail: user-h...@struts.apache.org > > >