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: [email protected]
For additional commands, e-mail: [email protected]