-
FEATURED COMPONENTS
First time here? Check out the FAQ!
I tried input data sales use listbox so, while i type Code in cell code, cell name will fill description automatically
my code like this
Invoice.zul <zk xmlns="<a href=" http:="" www.zkoss.org="" 2005="" zul"="">http://www.zkoss.org/2005/zul" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
<window id="win" width="950px" border="normal" >="" <tabbox="" id="tb" height="500px"> <tabs id="tabs"> <tab id="tbcreagte"/> </tabs> <tabpanels> <tabpanel> <panel id="panel" framable="true" height="450px"> <panelchildren>
<!-- Tested with ZK 6.0.2 -->
<div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('zkexample.invoice.InvoiceVM')">
<hlayout>
<vlayout>
<listbox id="listboxInvoice" width="700px" model="@load(vm.penjualanModel)"
selectedIndex="@bind(vm.selectedIndex)"
onModelDataChange="@command('updateModelData')"
sizedByContent="true"
itemRenderer="zkexample.invoice.InplaceEditingInvoiceRenderer"
>
</listbox>
<hlayout>
<button label="add new" onClick="@command('addNew')" />
</hlayout>
</vlayout>
</hlayout>
</div>
</panelchildren>
</panel>
</tabpanel>
</tabpanels>
</tabbox>
</window> </zk>
InvoiceVM.java
public class InvoiceVM {
private ListModelList<Penjualan> _penjualanModel;
private int _selectedIndex = -1;
private Listbox listboxInvoice;
@WireVariable private CRUDPenjualanService CRUDPenjualanService;
public ListModel<Penjualan> getPenjualanModel () {
if (_penjualanModel == null) {
List<Penjualan> l = new ArrayList<Penjualan>();
_penjualanModel = new ListModelList<Penjualan>(l);
}
return _penjualanModel;
}
public void setSelectedIndex (int selectedIndex) {
_selectedIndex = selectedIndex;
}
public int getSelectedIndex () {
return _selectedIndex;
}
//add new line
@Command
public void addNew() {
if (_selectedIndex >= 0) {
_penjualanModel.add(_selectedIndex+1, new Penjualan ("","",BigDecimal.ZERO,0,BigDecimal.ZERO,BigDecimal.ZERO));
} else {
_penjualanModel.add(new Penjualan ("","",BigDecimal.ZERO,0,BigDecimal.ZERO,BigDecimal.ZERO));
}
}
@AfterCompose
public void initSetup(@ContextParam(ContextType.VIEW) Component view) {
Selectors.wireComponents(view, this, false);
CRUDPenjualanService = (CRUDPenjualanService) SpringUtil.getBean("CRUDPenjualanService");
List<Barang> list=CRUDPenjualanService.getAll(Barang.class);
//ok
for(Barang b : list){
System.out.println("barang = " + b.getNamaBarang());
}
}
}
InplaceEditingInvoiceRenderer.java
package zkexample.invoice; import java.math.BigDecimal; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.InputEvent; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zkplus.spring.SpringUtil; import org.zkoss.zul.Doublebox; import org.zkoss.zul.Intbox; import org.zkoss.zul.Label; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listhead; import org.zkoss.zul.Listheader; import org.zkoss.zul.Listitem; import org.zkoss.zul.ListitemRenderer; import org.zkoss.zul.Textbox;
/** * tested with ZK 6.0.2 * @author ben
*/ public class InplaceEditingInvoiceRenderer implements ListitemRenderer<penjualan> {
@SuppressWarnings("unchecked")
public void render (Listitem listitem, Penjualan data, int index) {
Listbox listbox = listitem.getListbox();
if (index == 0 && listbox.getListhead() == null) {
createListhead().setParent(listbox);
}
listitem.setValue(data);
addTextboxCell(listitem, data.getKodeBarang())
.addEventListener(Events.ON_CHANGE, getKodeBarangChangedListener(listbox, data, listitem));
addLabelCell(listitem, data.getNamaBarang());
Doublebox harga = addDoubleboxCell(listitem, data.getHarga());
Intbox qty = addIntboxCell(listitem, data.getQty());
qty.addEventListener(Events.ON_CHANGE, getQtyChangedListener(listbox, qty, data, listitem));
Doublebox diskon = addDoubleboxCell(listitem, data.getDiskon());
Doublebox totalHarga = addDoubleboxCell(listitem, data.getTotalHarga());
}
private Listhead createListhead () {
Listhead lh = new Listhead();
createListheader("Kode Barang", "kodeBarang").setParent(lh);
createListheader("Nama Barang", "namaBarang").setParent(lh);
createListheader("Harga", "harga").setParent(lh);
createListheader("Qty", "qty").setParent(lh);
createListheader("Diskon", "diskon").setParent(lh);
createListheader("Total Harga", "totalHarga").setParent(lh);
return lh;
}
private Listheader createListheader (String label, String fieldToCompare) {
Listheader lhr = new Listheader(label);
lhr.setSortAscending(new PersonComparator(true, fieldToCompare));
lhr.setSortDescending(new PersonComparator(false, fieldToCompare));
return lhr;
}
private Textbox addTextboxCell (Listitem listitem, String value) {
Listcell lc = new Listcell();
Textbox tbx = new Textbox(value);
tbx.setParent(lc);
lc.setParent(listitem);
return tbx;
}
private Label addLabelCell (Listitem listitem, String value) {
Listcell lc = new Listcell();
Label lbl = new Label(value);
lbl.setParent(lc);
lc.setParent(listitem);
return lbl;
}
private Doublebox addDoubleboxCell (Listitem listitem, BigDecimal value) {
Listcell lc = new Listcell();
Doublebox ibx = new Doublebox();
if (value != null) {
ibx.setValue(value.doubleValue()); //.setValue(value);
}
ibx.setParent(lc);
lc.setParent(listitem);
return ibx;
}
private Intbox addIntboxCell (Listitem listitem, Integer value) {
Listcell lc = new Listcell();
Intbox ibx = new Intbox();
if (value != null) {
ibx.setValue(value);
}
ibx.setParent(lc);
lc.setParent(listitem);
return ibx;
}
@SuppressWarnings("rawtypes")
private EventListener getKodeBarangChangedListener (final Listbox listbox, final Penjualan oldData, final Listitem listitem){{
return new EventListener () {
public void onEvent (Event event) {
InputEvent ievent = (InputEvent)event;
Barang barang=new Barang();
Order order=new Order();
//EROR here while CELL KodeBarang lost focus or changed
barang=order.getBarang(ievent.getValue());
System.out.println("kodeBarang = " + ievent.getValue() + " namanya = "+ barang.getNamaBarang());
}
};
}
}
Order.java
public class Order {
@WireVariable private CRUDPenjualanService CRUDPenjualanService;
public Barang getBarang(String code){
CRUDPenjualanService = (CRUDPenjualanService) SpringUtil.getBean("CRUDPenjualanService");
return (Barang)CRUDPenjualanService.getByCode(code);
}
}
Erorr org.springframework.orm.hibernate3.HibernateSystemException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:690) at org.springframework.orm.hibernate3.HibernateExceptionTranslator.convertHibernateAccessException(HibernateExceptionTranslator.java:89) at org.springframework.orm.hibernate3.HibernateExceptionTranslator.translateExceptionIfPossible(HibernateExceptionTranslator.java:68) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy35.getByCode(Unknown Source) at zkexample.invoice.CRUDPenjualanServiceImpl.getByCode(CRUDPenjualanServiceImpl.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) at com.sun.proxy.$Proxy36.getByCode(Unknown Source) at zkexample.invoice.Order.getBarang(Order.java:20) at zkexample.invoice.InplaceEditingInvoiceRenderer$1.onEvent(InplaceEditingInvoiceRenderer.java:128) at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2746) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2717) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2658) at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136) at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:536) at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.run(EventProcessingThreadImpl.java:463)
Thanks,
why the cell Nama Barang does not contain automatically, while cell Kode Barang is changed, i has modified like this
@SuppressWarnings("rawtypes")
private EventListener getKodeBarangChangedListener (final Listbox listbox, final Penjualan oldData, final Listitem listitem){//,final CRUDPenjualanService service) {
return new EventListener () {
public void onEvent (Event event) {
InputEvent ievent = (InputEvent)event;
Barang barang=new Barang();
Order order=new Order();
barang=order.getBarang(ievent.getValue());
Events.postEvent(ModelDataChangeEvent
.getModelDataChangeEvent(listbox,
new
//sets the value for the cell Nama Barang
Penjualan(ievent.getValue(), barang.getNamaBarang() ,oldData.getHarga(),oldData.getQty(),oldData.getDiskon(),oldData.getTotalHarga()),listitem.getIndex()));
}
};
}
ModelDataChangeEvent.java
package zkexample.invoice;
import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event;
/** * tested with ZK 6.0.2 * @author ben
*/ public class ModelDataChangeEvent extends Event { private static final long serialVersionUID = 3645653880934243558L;
// the changed data, can be any Object
private final Object _data;
// the index to apply this change
private int _index;
public static ModelDataChangeEvent getModelDataChangeEvent (Component target, Object data, int index) {
return new ModelDataChangeEvent("onModelDataChange", target, data, index);
}
public ModelDataChangeEvent (String kodeBarang, Component target, Object data, int index) {
super(kodeBarang, target);
_data = data;
_index = index;
}
public Object getData () {
return _data;
}
public int getIndex () {
return _index;
}
}
thanks
ok is solved , i change method updateModelData in InvoiceVM.java like this
@Command
public void updateModelData(@ContextParam(ContextType.TRIGGER_EVENT) ModelDataChangeEvent event) {
Penjualan oldPenjualan = _penjualanModel.get(event.getIndex());;
Penjualan newPenjualan = (Penjualan)event.getData();
oldPenjualan.setKodeBarang(newPenjualan.getKodeBarang());
Barang barang=new Barang();
barang=CRUDPenjualanService.getByCode(newPenjualan.getKodeBarang());
oldPenjualan.setNamaBarang(barang.getNamaBarang());
oldPenjualan.setHarga(barang.getHarga());
oldPenjualan.setQty(newPenjualan.getQty());
oldPenjualan.setDiskon(newPenjualan.getDiskon());
BigDecimal totalHarga=(newPenjualan.getHarga().multiply(new BigDecimal(newPenjualan.getQty())))
.subtract(newPenjualan.getDiskon());
oldPenjualan.setTotalHarga(totalHarga);
}
and i made method calculate,
@Command
@NotifyChange("penjualanModel")
public void calculate() {
List<Penjualan> l = new ArrayList<Penjualan>();
for (Penjualan p : _penjualanModel.getInnerList()) {
l.add(new Penjualan(p.getKodeBarang(),p.getNamaBarang(),p.getHarga(),p.getQty(),p.getDiskon(),p.getTotalHarga()));
}
_penjualanModel = new ListModelList<Penjualan>(l);
_penjualanModel.add(new Penjualan ("","",BigDecimal.ZERO,0,BigDecimal.ZERO,BigDecimal.ZERO));
}
then, how it will calculate method on the process when a cell Kode Barang is changed ? thanks
hello, i tried with add code like this
made new class CalculateModelDataChangeEvent.java
package zkexample.invoice;
import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event;
/** * tested with ZK 6.0.2 * @author ben
*/ public class CalculateModelDataChangeEvent extends Event { private static final long serialVersionUID = 3645653880934243558L;
// the changed data, can be any Object
private final Object _data;
// the index to apply this change
private int _index;
/**
* Get a ModelDataChangeEvent
* @param target the target to post this event
* @param data the changed data
* @param index the index to apply this change
* @return ModelDataChangeEvent
*/
public static CalculateModelDataChangeEvent getCalculateModelDataChangeEvent (Component target,Object data, int index) {
return new CalculateModelDataChangeEvent("onCalculateModelDataChange", target,data,index);
}
/**
*
* @param name event name, should starts with "on"
* @param target
* @param data
* @param index
*/
//public ModelDataChangeEvent (String name, Component target, Object data, int index) {
public CalculateModelDataChangeEvent (String name, Component target, Object data, int index) {
//super(name, target);
super(name, target);
_data = data;
_index = index;
}
public Object getData () {
return _data;
}
public int getIndex () {
return _index;
}
}
then add code in
@SuppressWarnings("rawtypes")
private EventListener getKodeBarangChangedListener (final Listbox listbox, final Penjualan oldData, final Listitem listitem){//,final CRUDPenjualanService service) {
return new EventListener () {
public void onEvent (Event event) {
InputEvent ievent = (InputEvent)event;
System.out.println("ini diprose change kode barang");
Events.postEvent(ModelDataChangeEvent.getModelDataChangeEvent(listbox,
new Penjualan(ievent.getValue(),oldData.getNamaBarang(),oldData.getHarga(),oldData.getQty(),oldData.getDiskon(),oldData.getTotalHarga()),
listitem.getIndex())
);
Events.postEvent(CalculateModelDataChangeEvent.getCalculateModelDataChangeEvent(listbox,
null,// new Penjualan(ievent.getValue(),oldData.getNamaBarang(),oldData.getHarga(),oldData.getQty(),oldData.getDiskon(),oldData.getTotalHarga()),
listitem.getIndex())
);
}
};
}
then in invoice.zul change be
<listbox id="listboxInvoice" width="700px" model="@load(vm.penjualanModel)"
selectedIndex="@bind(vm.selectedIndex)"
onModelDataChange="@command('updateModelData')"
onCalculateModelDataChange="@command('calculate')"
sizedByContent="true"
itemRenderer="zkexample.invoice.InplaceEditingInvoiceRenderer"
>
then how to get focus in cell Qty ?
I has try with add code like this
@SuppressWarnings("rawtypes")
private EventListener getKodeBarangChangedListener (final Listbox listbox, final Penjualan oldData, final Listitem listitem){//,final CRUDPenjualanService service) {
return new EventListener () {
public void onEvent (Event event) {
InputEvent ievent = (InputEvent)event;
Events.postEvent(ModelDataChangeEvent.getModelDataChangeEvent(listbox,
new Penjualan(ievent.getValue(),oldData.getNamaBarang(),oldData.getHarga(),oldData.getQty(),oldData.getDiskon(),oldData.getTotalHarga()),
listitem.getIndex())
);
Events.postEvent(CalculateModelDataChangeEvent.getCalculateModelDataChangeEvent(listbox,
null,// new Penjualan(ievent.getValue(),oldData.getNamaBarang(),oldData.getHarga(),oldData.getQty(),oldData.getDiskon(),oldData.getTotalHarga()),
listitem.getIndex())
);
//add code
//for set focus to cell qty
((Listbox)listitem.getParent()).setSelectedIndex(listitem.getIndex());
Listitem i=((Listbox)listitem.getParent()).getItemAtIndex(listitem.getIndex());
//cell 3 is qty
Listcell c=(Listcell) i.getChildren().get(3);
c.focus();
}
};
}
but still not working
Asked: 2014-06-16 11:27:57 +0800
Seen: 39 times
Last updated: Jun 26 '14
ZK Listbox Selectitems issue with Set
How to stop a bug from a listbox?
Cannot Change Listbox Header color & Background
Keyboard navigation in listbox
Can not display data in listbox
listbox with nonSelectabletags inplace new listitem
Change color to hover listitem listbox zk7 + Atlantic Theme
Listbox with autopaging causes constant row flickering
zk listbox getItems() returns null for item.getValue() if not scrolled fully