Codigo dinamico passado como string

Pessoal estou com um problema aqui.

Estou passando um codigo por uma string mais ao invez de ele “fazer” o que deve fazer fica em forma de texto, vai ser mais facil vendo o exemplo .

 public class testeAtividade{
	
	private String PalavraRetorno = "<h:outputText value=\"esta passando ok\"></h:outputText>";
	
	
	public String getPalavraRetorno(){
	
		return PalavraRetorno;
	}
}

isso é o que eu passo , só que dae quando eu chamo o metodo de get, ele até aparece no portal, não do jeito que é pra ser , qeu é o texto : (esta passando ok), ele aparece assim , (<h:outputText value=“esta passando ok”></h:outputText>), ou seja , ele nao interpreta.

Alguem tem alguma forma de me ajudar ?

Att Thyago Pereira

Por que vc não coloca o <h:outputText value=“esta passando ok”/> direto na página???

Fiquei curioso … qual o seu objetivo em fazer isso??

Oproblema de colocar direto, é que vai ser tudo dinamico, ou seja, ele vai gera o codigo na hora, por exemplo o cara gerou no meu programa uma interface com botões e labels, dae ele pega e gera uma interface em JSF, só que o problema é que eu estou passando por uma string antes de tudo, e esta string nao interpreta como uma linguegem de “JSF” e sim como uma texto qualquer .

Quero saber como que eu faço para ele se tornar normal, ou melhor fique interpretado mesmo .

Pessoal , em relação a minha duvida eu achei mais uma coisa que pode ajudar na resolução do problema.

Primeiramente ele estava escrevendo, porque eu estatava colocando o que eu queria no meu codigo dentro de um outputText.

Assim:

<div style="background-color:rgb(240,240,240);">
 <label> Numero de Ocorrencias </label><br/>
<label>Atividade X Y</label>
 <h:inputText value="#{APE_16_27_09_270.n_Ocorrencias}" />
 <label>Atividade Conta</label>
 <h:inputText value="#{APE_16_27_17_110.n_Ocorrencias}" />
 <label>Atividade Regra</label>
 <h:inputText value="#{APE_14_04_11_810.n_Ocorrencias}" /> 
---> <h:outputText value="#{testeAtividade.palavraRetorno}"></h:outputText>    <---
 </div>

e a classe que eu chamo ali esta assim.

 public class testeAtividade{	

	private String PalavraRetorno = "<h:outputText value="Deve aparecer apenas este texto" />";   

	public String getPalavraRetorno(){
	
		return PalavraRetorno;
	}	
}

Então eu acho que devo colocar dentro de uma div essa palavra retorno.

Só que como que eu vou pegar esse retorno da classe e colocar dentro de uma div ?

Sei que tenho que usar isso aqui ( #{nomeDaclasse.StringQueEuQuero} ) mas pra colocar dentro de uma div alguem sabe, pois nao tem como usar value que nem o “<h:outputText value=” #{nomeDaclasse.StringQueEuQuero} " .

Alguem pode me ajudar ?

cara, coloca <h:outputText value="#{testeAtividade.palavraRetorno}" rendered="#{testeAtividade.renderizaPalavra}"/>

E cria um método no bean testeAtividade chamado isRenderizaPalavra que retorne true quando for pra exibir a palavra e false caso contrário.
E o método getPalavraRetorno passa a retornar o que vc quer que seja exibido.

Vc não vai conseguir criar um componente JSF dinamicamente, visto que as tags JSF ou qualquer tag de uma taglib precisam ser processadas pelo container e/ou pelo framework antes de serem renderizadas. Uma opção seria seguir a dica do dsjbv, ou seja, esconder os componentes que não devem ser exibidos.

[]´s

Vc pode inserir componentes dinamicos desta forma:

package br.com.sansoftware.managebean;


import java.util.List;
import javax.faces.component.UIInput;
import javax.faces.component.UISelectItem;
import javax.faces.component.UISelectOne;
import javax.faces.component.html.HtmlPanelGrid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import br.com.sansoftware.model.Employee;
import br.com.sansoftware.service.EmployeeService;


@Scope(value = "session")
@Controller("backingBean")
public class BackingBean {

	     private HtmlPanelGrid containerComponent;
            @Autowired
	     private EmployeeService employeeService;
	     
             public void addComponent() {
	        containerComponent.getChildren().clear();
	        List<Employee> nodes=employeeService.listAll();
	        if(nodes.size()>1){
	        	UISelectOne box =new UISelectOne();
	        	for (Employee node : nodes) {
	        	    UISelectItem item = new UISelectItem();
	                    item.setItemLabel(node.getNome());
	                    item.setItemValue(node.getId());
	                    box.getChildren().add(item); 
	                }
	                containerComponent.getChildren().add(box);
	        }else{
	        	UIInput input=new UIInput();
	        	input.setValue(nodes.get(0));
	        	containerComponent.getChildren().add(input);
	        }
	    }

	    public HtmlPanelGrid getContainerComponent() {
	        return containerComponent;
	    }

	    public void setContainerComponent(HtmlPanelGrid containerComponent) {
	        this.containerComponent = containerComponent;
	    }

	
}

Na sua pagina:

<h:form id="frmTeste">
      <h:panelGrid id="grid" binding="#{backingBean.containerComponent}">
      </h:panelGrid>
      <h:commandButton value="Add UI Components" action="#{backingBean.addComponent}"/>
</h:form>