[jboss-user] [JBoss Seam] - inject into a non-component?
laksu
do-not-reply at jboss.com
Wed Aug 15 12:13:04 EDT 2007
I have a wrapper class called Node implementing TreeNode from RichFaces. I try to avoid recursively populating the whole tree and so have a mechanism in there to populate each node as they are referred. And in conjunction with the "ajax" property of the tree component, I expect the individual population of the nodes happening in the ajax calls.
The class "Node" basically keeps a Map (required to be a Map by the tree) of my Category objects that are children of the wrapped Category object when populated.
I provide these details because I could not figure out what kind of a component the Node should be.
My proof of concept does not even start by populating the root node. I try to inject the session (I use Hibernate/session instead of JPA/em) but it is injected null or not injected.
So the question is if my "Node" should be a Seam component to have the Hibernate session injected and if so what kind of a scope I should put it in?
Here follows my Node class:
| public class Node<E extends Treeable<E>> implements TreeNode {
|
| @In(create=true)
| private Session session;
|
| private E value;
| Node parent;
|
| public Node(E aValue, Node<E> parent) {
| value=aValue;
| this.parent=parent;
| System.out.println("initing Node with Treeable="+aValue.getName());
| }
|
| private Map<Long,Node<E>> dataMap;
|
| public Node(String className) {
| List<E> rooties;
| System.out.println("Expanding root. session is"+session);
| rooties=session.createQuery("from "+className+" where parent"+className+" is null")
| .list();
|
| System.out.println("Root has "+rooties.size()+" rooties");
| dataMap=new HashMap<Long,Node<E>>();
| for(E rootie:rooties){
| Node node=new Node(rootie,this);
| dataMap.put(rootie.getId(),node);
| System.out.println("Rootie :"+rootie.getName()+" was added to roots");
| }
|
| System.out.println("initing rooties done");
| }
|
|
| public Map<Long, Node<E>> getDataMap() {
| if (dataMap==null){
| List<E> children;
| System.out.println("Expanding Node:"+value);
| String className=value.getClass().getName();
| children=session.createQuery("from "+className+" where parent"+className+"= :parent")
| .setEntity("parent",value)
| .list();
|
| dataMap=new HashMap<Long,Node<E>>();
| for(E child:value.getChildren()){
| Node node=new Node(child,this);
| dataMap.put(child.getId(),node);
| }
| }
| return dataMap;
| }
|
| public Object getData() {
| return this;
| }
|
| public void setData(Object data) {
| }
|
| public boolean isLeaf() {
| return getDataMap().isEmpty();
| }
|
| public Iterator getChildren() {
| System.out.println("getChildren is called for:"+toString());
| return getDataMap().entrySet().iterator();
| }
|
| public TreeNode getChild(Object id) {
| return getDataMap().get(id);
| }
|
| public void addChild(Object identifier, TreeNode child) {
| }
|
| public void removeChild(Object id) {
| }
|
| public TreeNode getParent() {
| System.out.println("getParent is called for:"+toString());
| return parent;
| }
|
|
| public void setParent(TreeNode treeNode) {
| System.out.println("setParent is called with:"+treeNode);
| }
|
| public String getType(){
| return (value==null)?"root":value.getType();
| }
|
| public String toString(){
| ...
| }
|
| public String getName(){
| return value.getName();
| }
|
| public E getValue() {
| return value;
| }
|
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4074495#4074495
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4074495
More information about the jboss-user
mailing list