outputlink order problem
nicolasb May 29, 2007 9:09 AMhello
i really don't get the reason for this strange problem:
first my environment:
the entity a simple foto with a number attribute
import java.io.Serializable; import javax.persistence.*; import org.jboss.seam.annotations.Name; @Entity @Name("photo") public class Photo implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private long id; private String number; public long getId() { return id;} public void setId(long id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }
the facelet
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://jboss.com/products/seam/taglib"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> </head> <body> <h:form> <h:inputText value="#{photo.number}"/> <h:commandButton type="submit" value="Add" action="#{formAction.addItem}"/> </h:form> <h:outputLink value="test.html" rendered="#{myservice.value == true}">Is True</h:outputLink> </body> </html>
with the corrosponding pages def.
<page view-id="/test.xhtml"> <action execute="#{myservice.load}"/> </page>
and the bean from where the page gets the data
import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; import org.jboss.seam.log.Log; @Name("myservice") @Scope(ScopeType.EVENT) public class MyServiceBean { @Logger private Log log; private boolean value = true; public boolean getValue() { return this.value; } @Out(required=false) private Photo photo; public Photo getPhoto() { return this.photo; } public void load() { log.info("loading"); this.photo = new Photo(); this.photo.setNumber("testPhoto"); } }
so when the page is loaded the method load is executed and the photo is being outjected. which i then access in my facelet form
now to the strange part:
import javax.ejb.Remove; import javax.ejb.Stateful; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.log.Log; @Stateful @Name("formAction") public class FormActionBean implements FormAction { @Logger private Log log; @In Photo photo; public void addItem() { log.info("adding: "+photo.getNumber()); } @Remove @Destroy public void Destroy() {} } public interface FormAction { public void addItem(); public void Destroy(); }
when i try to submit the form and access the addItem method it won't work.
an exception is thrown because @In is not non-null
BUT it works when i put the outputlink above the form.
i found out its the rendered attribute which messes it up. if i omit it there won't be an error
i hope someone can help me i tried to post all the necessary files
thanks in advance