Hello, perhaps this is normal behavior although it wouldn't any sense to me, but my value encoder seems to be called twice for every new row added to the AjaxAddRow component. Is this normal? I'm not sure why it is happening. Sample code.
.tml <div t:type="ajaxFormLoop" t:id="lineItem" source="pr.lineItems" value="lineItem" show="show" encoder="encoderLineItem"> <t:submitnotifier> <t:hidden value="lineItem.sequenceNumber"/> <t:TextField value="lineItem.quantity"/> <t:TextField value="lineItem.description"/><t:removerowlink>Remove</t:removerowlink> </t:submitnotifier> <p:addRow> <t:addrowlink>Add a row</t:addrowlink> </p:addRow> </div> java.class void onActivate(String prId) throws Exception { Long id; try { id = Long.parseLong(prId); } catch (NumberFormatException e) { //TODO HANDLE THIS throw new NumberFormatException("Bad url parameters " + e); } //Queries for existing purchase request. //We are ignoring ajax request and only allowing valid form submissions //without serverside validation errors to pass through. if(form.isValid()) { this.pr = this.purchaseRequestService.find(id); if(this.pr == null) { //TODO HANDLE THIS throw new Exception("Pr doesn't exist."); } } } Object onPassivate() { Object value = null; if (this.pr != null) { value = this.pr.getId(); } return value; } void onPrepareFromPr() { if (form.isValid() && this.pr == null) { this.pr = new PurchaseRequest(); } else if(!form.isValid()) { this.pr = this.prReconstruction; } } public LineItem getLineItem() { return lineItem; } public void setLineItem(LineItem lineItem) { this.lineItem = lineItem; if (isSubmitAction) { if(lineItem.getId() == null) { this.pr.getLineItems().add(lineItem); } this.lineItem.setHoldItem(true); } } LineItem onAddRowFromLineItem() { return new LineItem(); } void onRemoveRowFromLineItem(LineItem lineItem) { //Do Nothing } public ValueEncoder getEncoderLineItem() { System.out.println("Value Encoder"); return new ValueEncoder<LineItem>() { public String toClient(LineItem value) { System.out.println("toClientId " + value); if (value.getId() != null) { return value.getId().toString(); } return value.getTempId().toString(); } public LineItem toValue(String clientValue) { Long id = new Long(clientValue); if (id > 0) { for(LineItem lineItem : pr.getLineItems()) { if(lineItem.getId().equals(id)) { return lineItem; } } } return new LineItem(pr); } }; } -- View this message in context: http://tapestry.1045711.n5.nabble.com/Value-encoder-toClient-called-twice-for-each-request-tp5716275.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org