struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lukasz Lenart <lukaszlen...@apache.org>
Subject Re: datetimepicker used in conjunction with theme=simple form
Date Mon, 07 Apr 2014 09:05:17 GMT
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.kelly@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">&nbsp;</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.kelly@riverdynamics.com <mailto:patrick.kelly@riverdynamics.com>
> W: www.riverdynamics.com <http://www.riverdynamics.com/>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message