Okay, im writing inline...
Mathias P.W Nilsson wrote:
Here is the fragment for sending external data. The form is a class variable
and is visible in the fragment
final class PostenOrderFragment extends Fragment{
private static final long serialVersionUID = 1L;
public PostenOrderFragment( String panel, String id ){
super( panel, id, OrderControl.this );
final PostenOrder order = (PostenOrder) getOrder();
/* Transfer user data. Copy the data from the user to the order
*/
order.transferUserData(
((HairlessSession)getSession()).getUser() );
final HiddenField Merchant_id = new HiddenField(
"Merchant_id", new
Model( "" ) );
final HiddenField Version = new HiddenField( "Version", new Model(
""
));
final HiddenField Customer_refno = new HiddenField(
"Customer_refno", new
Model( "" ));
final HiddenField Currency = new HiddenField( "Currency", new Model(
""
));
final HiddenField Amount = new HiddenField( "Amount", new Model(
"" ));
final HiddenField VAT = new HiddenField( "VAT", new Model(
"" ));
final HiddenField Payment_method = new HiddenField( "Payment_method",
new Model( "" ) );
final HiddenField Purchase_date = new HiddenField(
"Purchase_date", new
Model( "" ) );
final HiddenField Response_URL = new HiddenField(
"Response_URL", new
Model( "" ) );
final HiddenField Card_num = new HiddenField( "Card_num", new Model(
"" )
);
final HiddenField Cvx2 = new HiddenField( "Cvx2", new Model(
"" ) );
final HiddenField Exp_date = new HiddenField( "Exp_date", new Model(
""
) );
final HiddenField Card_type = new HiddenField( "Card_type",
new Model(
"" ) );
final HiddenField MAC = new HiddenField( "MAC", new Model( ""
) );
add( Merchant_id );
add( Version);
add( Customer_refno);
add( Currency );
add( Amount );
add( VAT );
add( Payment_method );
add( Purchase_date );
add( Response_URL);
add(Card_num );
add(Cvx2 );
add(Exp_date );
add( Card_type );
add( MAC );
add(new AjaxSubmitLink( "placeOrder", form ) {
private static final long serialVersionUID = 1L;
@Override
protected IAjaxCallDecorator getAjaxCallDecorator(){
return new IAjaxCallDecorator(){
private static final long
serialVersionUID = 1L;
public CharSequence
decorateScript(CharSequence script)
{
return
"document.getElementById('"+ getMarkupId()
+"').disabled=true;"+script;
}
public CharSequence
decorateOnFailureScript(CharSequence script)
{
return
script+"document.getElementById('"+ getMarkupId()
+"').disabled=false;";
}
public CharSequence
decorateOnSuccessScript(CharSequence script)
{
return
script+"document.getElementById('"+ getMarkupId()
+"').disabled=false;";
}
};
}
Im not sure why you need the above, could'nt you just append it to
target below, and have all code the same place?. I guess I just havent
used ajaxcalldecorators that much.
protected void onError(AjaxRequestTarget target, Form
form){
target.addComponent(feedback);
target.addComponent(form);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form
form ) {
if( target != null ){
target.addComponent(this);
Not sure why you need the ajax button added again?
target.addComponent(form);
Why do you need the form to be updated? If anything then only the hidden
field with hash value?
target.addComponent(feedback);
now feed back I get:)
if( !
((Boolean)acceptConditions.getModelObject() ).booleanValue() ){
info( "Du måste godkänna
köpvillkoren" );
return;
}
Cart cart = getCart();
try{
for( CartItem cartItem :
cart.getCartItems() ){
SubItem subItem =
cartItem.getSubItem();
if( subItem.getBalance()
<= 0 || subItem.getBalance() <
cartItem.getAmount() ){
throw new OrderException(
"Balance exceeded" );
}
}
}catch( OrderException ex ){
throw new
RestartResponseAtInterceptPageException( new CheckoutPage()
);
}
order.setCurrencyRate(
order.getStore().getCurrency().getRate() );
order.setOrderDate( new Date() );
getOrderDao().save( order );
try{
order.setMessageAuthenticationCode(
order.getHashedMessageAuthentificationCode());
}catch( OrderFormatException oex ){
info( oex.getMessage() );
return;
}
placeOrder( order );
Merchant_id.setModel( new Model(
order.getPaymentSetting().getMerchantId() ) );
Version.setModel(new Model(
order.getPaymentSetting().getVersion() ));
Currency.setModel( new Model(
order.getStore().getCurrency().getCode()
));
Payment_method .setModel( new Model(
order.getPostenPaymentMethod() )
);
Response_URL.setModel( new Model(
order.getPaymentSetting().getResponseURL() ) );
Card_num.setModel( new Model(
order.getCardNumber() ) );
Cvx2.setModel( new Model(
order.getCvx2() ) );
Exp_date.setModel( new Model(
order.getExpireDate() ) );
Card_type.setModel( new Model(
order.getCreditCardType() != null ?
order.getCreditCardType().getName() : "" ) );
Purchase_date.setModel( new Model(
order.getFormattedOrderDate() ) );
Customer_refno.setModel( new Model(
getStore().getId() + "-" +
order.getId()) );
Amount.setModel( new Model(
order.getFormattedCurrency(
order.getTotalCost() ) ));
VAT.setModel(new Model(
order.getFormattedCurrency( order.getTotalVAT()
) ));
try{
MAC.setModel( new Model(
order.getHashedMessageAuthentificationCode() ));
target.appendJavascript( "makeCallBack( '"+
order.getPaymentSetting().getHost() +"' )");
}catch( OrderFormatException oex ){
info( oex.getMessage() );
}
}else{
// TODO: Add fail page here
}
}
});
}
}
AND here is the javascript in the HTML page. ( makeCallBack(); )
function makeCallBack( URL ){
formRef = document.forms[ "orderForm" ].elements;
formRef[ "orderPanel:Merchant_id" ].name = "Merchant_id";
formRef[ "orderPanel:Response_URL" ].name = "Response_URL";
formRef[ "orderPanel:Version" ].name = "Version";
formRef[ "orderPanel:Customer_refno" ].name = "Customer_refno";
formRef[ "orderPanel:Currency" ].name = "Currency";
formRef[ "orderPanel:Amount" ].name = "Amount";
formRef[ "orderPanel:VAT" ].name = "VAT";
formRef[ "orderPanel:Payment_method" ].name = "Payment_method";
formRef[ "orderPanel:Purchase_date" ].name = "Purchase_date";
formRef[ "orderPanel:Card_num" ].name = "Card_num";
formRef[ "orderPanel:Cvx2" ].name = "Cvx2";
formRef[ "orderPanel:Exp_date" ].name = "Exp_date";
formRef[ "orderPanel:Card_type" ].name = "Card_type";
formRef[ "orderPanel:MAC" ].name = "MAC";
document.forms[ "orderForm" ].action = URL;
document.forms[ "orderForm" ].submit();
So here you change the names of the form? I'd still say that i'd go with
two completely different forms, just to keep the wicket side clean..
}
--
-Wicket for love
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]