-
FEATURED COMPONENTS
First time here? Check out the FAQ!
1 | initial version | |
I really do not like to bother, but I need a help: I am currently now testing a new application using EJB 3.1 and can not use dependency injection in the controller. But work on a regular servlet. It seems obvious that this should be no problem with zk. If someone went through something similar and can help me thank you. If I use jndi lookup works perfectly, of course. Let the code:
This is a simple zul file:
<?page title="Auto Generated index.zul"?>
<window title="Hello World!!" border="normal" width="100%" apply="TestController">
<div align="Center">
<vlayout>
<label value="You are using: ${desktop.webApp.version}"/>
<button label="Load List" id="btnLoad" />
<listbox id="listObjects" vflex="true" mold="paging" autopaging="true" >
<listhead>
<listheader label="This is my list" sort="auto" >
</listheader>
</listhead>
</listbox>
</vlayout>
</div>
</window>
And this is the zul controller:
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import br.com.mcampos.ejb.system.entity.Menu;
import br.com.mcampos.ejb.system.menu.session.MenuServiceRemote;
public class TestController extends GenericForwardComposer
{
private static final long serialVersionUID = -5998869122000174965L;
private Listbox listObjects;
@EJB
private MenuServiceRemote service; // THE problem!!!!!!
@Override
public void doAfterCompose( Component comp ) throws Exception
{
super.doAfterCompose( comp );
List<Menu> list = Collections.emptyList( );
if ( service != null ) // THIS IS ALWAYS NULL????
list = service.getAll( );
listObjects.setModel( new ListModelList ( list ) ); //we don't have a render,but doesn't matter now
}
}
Just in case, I've made a simple servlet just in case and it works!!!! Annoying!
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestServlet() {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGetPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGetPost(request, response);
}
@EJB
private MenuServiceRemote service; // THIS IS THE SAME OF MY CONTROLLER
private void doGetPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType( "text/html;charset=UTF-8" );
PrintWriter out = response.getWriter( );
out.println ( "<html><body></body></html>");
if ( service != null ) { // ######NOT NULL######, it works :(
List<Menu> list = service.getAll( );
for ( Menu item : list ) {
out.println ( "<br /> " + item.getMnuDescriptionCh( ) );
}
}
out.println ( "</body></html>");
out.close ();
}
}
The code's boring part - Entity + SessionBean + Interface:
@Entity
@Table(name="menu")
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
private Integer mnuIdIn;
private Boolean mnuAutocheckBt;
private Boolean mnuCheckedBt;
private Boolean mnuCheckmarkBt;
private String mnuDescriptionCh;
private Boolean mnuDisabledBt;
private Boolean mnuSeparatorBeforeBt;
private Integer mnuSequenceIn;
private String mnuUrlCh;
private Menu menu;
private List<Menu> menus;
private Media media;
public Menu() {
}
@Id
@Column(name="mnu_id_in", unique=true, nullable=false)
public Integer getMnuIdIn() {
return this.mnuIdIn;
}
public void setMnuIdIn(Integer mnuIdIn) {
this.mnuIdIn = mnuIdIn;
}
@Column(name="mnu_autocheck_bt")
public Boolean getMnuAutocheckBt() {
return this.mnuAutocheckBt;
}
public void setMnuAutocheckBt(Boolean mnuAutocheckBt) {
this.mnuAutocheckBt = mnuAutocheckBt;
}
@Column(name="mnu_checked_bt")
public Boolean getMnuCheckedBt() {
return this.mnuCheckedBt;
}
public void setMnuCheckedBt(Boolean mnuCheckedBt) {
this.mnuCheckedBt = mnuCheckedBt;
}
@Column(name="mnu_checkmark_bt")
public Boolean getMnuCheckmarkBt() {
return this.mnuCheckmarkBt;
}
public void setMnuCheckmarkBt(Boolean mnuCheckmarkBt) {
this.mnuCheckmarkBt = mnuCheckmarkBt;
}
@Column(name="mnu_description_ch", nullable=false, length=64)
public String getMnuDescriptionCh() {
return this.mnuDescriptionCh;
}
public void setMnuDescriptionCh(String mnuDescriptionCh) {
this.mnuDescriptionCh = mnuDescriptionCh;
}
@Column(name="mnu_disabled_bt")
public Boolean getMnuDisabledBt() {
return this.mnuDisabledBt;
}
public void setMnuDisabledBt(Boolean mnuDisabledBt) {
this.mnuDisabledBt = mnuDisabledBt;
}
@Column(name="mnu_separator_before_bt")
public Boolean getMnuSeparatorBeforeBt() {
return this.mnuSeparatorBeforeBt;
}
public void setMnuSeparatorBeforeBt(Boolean mnuSeparatorBeforeBt) {
this.mnuSeparatorBeforeBt = mnuSeparatorBeforeBt;
}
@Column(name="mnu_sequence_in", nullable=false)
public Integer getMnuSequenceIn() {
return this.mnuSequenceIn;
}
public void setMnuSequenceIn(Integer mnuSequenceIn) {
this.mnuSequenceIn = mnuSequenceIn;
}
@Column(name="mnu_url_ch", length=1024)
public String getMnuUrlCh() {
return this.mnuUrlCh;
}
public void setMnuUrlCh(String mnuUrlCh) {
this.mnuUrlCh = mnuUrlCh;
}
//bi-directional many-to-one association to Menu
@ManyToOne
@JoinColumn(name="mnu_parent_id")
public Menu getMenu() {
return this.menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
//bi-directional many-to-one association to Menu
@OneToMany(mappedBy="menu")
public List<Menu> getMenus() {
return this.menus;
}
public void setMenus(List<Menu> menus) {
this.menus = menus;
}
//bi-directional many-to-one association to Media
@ManyToOne (optional = true)
@JoinColumn(name="med_id_in")
public Media getMedia() {
return this.media;
}
public void setMedia(Media media) {
this.media = media;
}
}
This is a simple SessionBean, using a remote interface
@Stateless
public class MenuService implements MenuServiceRemote
{
@PersistenceContext
private transient EntityManager em;
@Override
@SuppressWarnings( "unchecked" )
public List<Menu> getAll( )
{
Query query = getEntityManager( ).createQuery( "SELECT m FROM Menu m ORDER BY m.mnuDescriptionCh" );
return query.getResultList( );
}
private EntityManager getEntityManager ()
{
return em;
}
}
The Remote Interface:
@Remote
public interface MenuServiceRemote {
List<Menu> getAll ();
}