Other than a few typos, code compiled and worked, however doesn't seem to be solving the issue. I'll show you exactly what I'm doing, maybe I'm missing something small. The value never seems to equal OTHER in your method. I really appreciate everything thus far. Thanks !
tml <t:AjaxFormLoop t:id="lineItem" source="purchaseRequest.lineItems" value="lineItem" encoder="encoderLineItem"> <t:TextField value="lineItem.name"/> <t:AjaxFormLoop t:id="lineItemFunding" context="lineItem.tempId" source="lineItem.lineItemFundings" value="lineItemFunding" encoder="encoderLineItemFunding"> <t:Select t:id="newFunding" value="lineItemFunding.funding" model="fundingModel" zone="fundingZone" encoder="selectEncoder" blankOption="always" blankLabel="Funding Source"/> </t:AjaxFormLoop> </t:AjaxFormLoop> class @PageActivationContext private PurchaseRequest _purchaseRequest; @Property @Persist private PurchaseRequest purchaseRequest; @Property private LineItemFunding lineItemFunding; @Property private Funding funding; @Property @Persist private SelectModel fundingModel; @Inject private SelectModelFactory selectModelFactory; @Inject private ValueEncoderSource valueEncoderSource; final private static String NEW_FUNDING_NAME = "+ Add New Funding"; final private static Funding OTHER = new Funding(); final private static String OTHER_ID = "-1"; void setupRender() { if(_purchaseRequest == null) { purchaseRequest = new PurchaseRequest(); } else { purchaseRequest = _purchaseRequest; } } void onPrepareFromPR() { List<Funding> _fundings = session.createCriteria(Funding.class).add(Restrictions.eq("purchaseRequest.id", purchaseRequest.getId())).list(); funding = new Funding(); funding.setName(NEW_FUNDING_NAME); funding.setId(OTHER_ID); _fundings.add(funding); fundingModel = selectModelFactory.create(_fundings, "label"); } public Object onValueChanged(Funding funding) { if(funding != null && funding.getName().equals(NEW_FUNDING_NAME)) { return fundingZone.getBody(); } return null; } @CommitAfter void onSuccessFromPR() { session.saveOrUpdate(purchaseRequest); } //Select Menu OnChange public Object onValueChanged(Funding funding) { if(funding != null && funding.getName().equals(NEW_FUNDING_NAME)) { return fundingZone.getBody(); } return null; } //Encoders @SuppressWarnings("unchecked") public ValueEncoder getEncoderLineItem() { return new ValueEncoder<LineItem>() { public String toClient(LineItem value) { Long key = value.getTempId(); return key.toString(); } public LineItem toValue(String keyAsString) { Long key = new Long(keyAsString); for (LineItem holder : purchaseRequest.getLineItems()) { if (holder.getTempId() == key) { return holder; } } return null; } }; } @SuppressWarnings("unchecked") public ValueEncoder getEncoderLineItemFunding() { return new ValueEncoder<LineItemFunding>() { public String toClient(LineItemFunding value) { Long key = value.getTempId(); return key.toString(); } public LineItemFunding toValue(String keyAsString) { Long key = new Long(keyAsString); for (LineItemFunding holder : lineItem.getLineItemFundings()) { if (holder.getTempId() == key) { return holder; } } return null; } }; } public ValueEncoder<Funding> getSelectEncoder() { final ValueEncoder<Funding> encoder = valueEncoderSource.getValueEncoder(Funding.class); return new FundingValueEncoder(encoder); } final private static class FundingValueEncoder implements ValueEncoder<Funding> { final private ValueEncoder<Funding> delegate; public FundingValueEncoder(ValueEncoder<Funding> delegate) { this.delegate = delegate; } public String toClient(Funding value) { if (value == OTHER) { System.out.println(OTHER_ID); return OTHER_ID; } else { return delegate.toClient(value); } } public Funding toValue(String clientValue) { if (OTHER_ID.equals(clientValue)) { return OTHER; } else { return delegate.toValue(clientValue); } } } //Add Row - TempID UUID LineItem onAddRowFromLineItem() { LineItem newLineItem = new LineItem(); purchaseRequest.getLineItems().add(newLineItem); newLineItem.setPurchaseRequest(purchaseRequest); return newLineItem; } LineItemFunding onAddRowFromLineItemFunding(Long tempId) { LineItemFunding newLineItemFunding = new LineItemFunding(); for (LineItem _lineItem : purchaseRequest.getLineItems()) { if (_lineItem.getTempId() == tempId) { _lineItem.getLineItemFundings().add(newLineItemFunding); newLineItemFunding.setLineItem(_lineItem); break; } } return newLineItemFunding; } -- View this message in context: http://tapestry.1045711.n5.nabble.com/T5-Select-Menu-with-Other-Option-tp4520881p4521396.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