É Bug do MyFaces?

6 respostas
andre_guitar7

Bem, acho que é bug, mas se estiver fazendo errado me falem. Criei um projeto no Eclipse só para simular o erro. Está dessa forma:

ManagedBeans:
public class SendManaged {
	
	private String send;
	private List listOfSends = new ArrayList();
	private final String VIEW = "view";
	
	public void setSend( String send ){
		this.send = send;
	}
	public String getSend(){
		return this.send;
	}
	
	@SuppressWarnings("unchecked")
	public List getListOfSends(){
		this.listOfSends.add( "test1" );
		this.listOfSends.add( "test2" );
		this.listOfSends.add( "test3" );
		return this.listOfSends;
	}
		
	public String view(){
		return this.VIEW;
	}

}
public class ReceiveManaged {
	
	public void setAtributeReceive( String atribute ){
		System.out.println( "Recebi atributo: " + atribute );
	}
	
	public void test(){
		
	}

}
faces-config.xml
<faces-config>
	
	<managed-bean>
      	<managed-bean-name>SendManaged</managed-bean-name>
      	<managed-bean-class>br.test.managedbean.SendManaged</managed-bean-class>
      	<managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    
    <navigation-rule>	
		<navigation-case>
			<from-outcome>view</from-outcome>
			<to-view-id>/view.jsp</to-view-id>
		</navigation-case>	
	</navigation-rule>
	
	<managed-bean>
      	<managed-bean-name>ReceiveManaged</managed-bean-name>
      	<managed-bean-class>br.test.managedbean.ReceiveManaged</managed-bean-class>
      	<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    
</faces-config>
home.jsp
<%@ page language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
	
<f:view>

	<t:dataTable var="send" value="#{SendManaged.listOfSends}">
    	<h:column>
	    	<h:form>
				<h:commandLink action="#{SendManaged.view}">
					<h:outputText value="Ver" />
			    	<t:updateActionListener property="#{SendManaged.send}" value="#{send}" />
			    </h:commandLink>
   			</h:form>
    	</h:column>
	</t:dataTable>

</f:view>
view.jsp
<%@ page language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
	
<f:view>
	
	<h:outputText value="Send: #{SendManaged.send}" />
	
	<h:form>
		<h:commandLink action="#{ReceiveManaged.test}">
			<t:outputText value="Send" />
			<t:updateActionListener property="#{ReceiveManaged.atributeReceive}" value="#{SendManaged.send}" />
		</h:commandLink>    	
	</h:form>

</f:view>

Tenho uma página home.jsp que exibe um dataTable com dados do listOfSends do SendManaged. Cada coluna tem um commandLink. Esse commandLink passa para view.jsp que tem um outro link. Aí é que tá o problema: nessa página view.jsp tem um commandLink da seguinte forma:

<h:form>
		<h:commandLink action="#{ReceiveManaged.test}">
			<t:outputText value="Send" />
			<t:updateActionListener property="#{ReceiveManaged.atributeReceive}" value="#{SendManaged.send}" />
		</h:commandLink>    	
	</h:form>
No System.out.println do método setAtributeReceive ele imprime:

Recebi atributo: null

É bug? Estou fazendo algo errado?

Meu projeto teste está em anexo, sem os libs...

6 Respostas

urubatan

o h:form tem que estar por fora do dataTable …

andre_guitar7

Meu home tá assim agora...

<%@ page language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
	
<f:view>

	<h:form>
		<t:dataTable var="send" value="#{SendManaged.listOfSends}">
	    	<h:column>	    	
					<h:commandLink action="#{SendManaged.view}">
						<h:outputText value="Ver" />
				    	<t:updateActionListener property="#{SendManaged.send}" value="#{send}" />
				    </h:commandLink>   			
	    	</h:column>
		</t:dataTable>
	</h:form>

</f:view>
E não funciona... o problema acontece na página view.jsp. Quando a página vai pela primeira vez do home.jsp para o view.jsp ele imprime no o conteúdo normalmente. Mas quando executo o link da página view.jsp imprime null no método.
urubatan

ahh bom :smiley:
isto não é bug do myfaces, é bug de programação …

o SendManaged é do escopo de request …
e quando tu clica no link da home, o valor de send é setado …

mas quando tu clica no link na página de view, o valor é null mesmo, pq é outro request e foi criada uma nova instancia de SendManaged

andre_guitar7

Como poderia resolver isso?

urubatan

colocando um inputHidden com o campo :smiley:

andre_guitar7

vc manja, hein…

valewss :smiley:

Criado 24 de agosto de 2006
Ultima resposta 24 de ago. de 2006
Respostas 6
Participantes 2