Binding HtmlToolBar

3 respostas
Pedro_Java

Galera estou querendo criar um menu que é dinamico na aplicação, ele vai ser manipulado por um MB que vai ficar na sessão, toda vez que alguma coisa acontece na aplicação um novo menu é montado e dou um reRender nessa parte

<a4j:form > <a4j:outputPanel id="menuAcaoConteudo"> <a4j:region rendered="#{workflowMenuAcaoMB.menuAcaoState}" > <div align="right"> <rich:toolBar style="width: 200px;" width="50%" binding="#{workflowMenuAcaoMB.menuAcao}" /> </div> </a4j:region> </a4j:outputPanel> </a4j:form>

Problema é o seguinte, ele dá esse binding somente a primeira vez, q eu ele é carregado, quando eu modifico o menu, ele não dá o binding, eu coloquei um break point no getMenuAcao, e realmente somente na primeira vez que ele da o binding, alguem sabe me explicar por que, se existe alguma solução. Obrigado

3 Respostas

Marcio_Duran

Bom acho que tem algo nesse post, ao assunto referente !!!

http://roneiv.wordpress.com/2008/08/07/ajax-rerendering-how-to-rerender-part-of-your-page-in-myfaces-using-richfaces/

[size=18]; )[/size]

Pedro_Java

Vou colocar meu problema todo para ajudar vocês a me ajudar, seguinte, na minha aplicação tem dois menus, um menu superior, e um menu que interage com os objetos da aplicação, é aonde eu seto minhas ações como incluir e excluir editar salvar, e esse menu tem que ser montado toda hora, quando eu inicio a aplicação esse menu vem vazio, porque eu ainda não sei o que eu vou fazer, agora se eu clico no menu superior por exemplo em Usuario, ele abre um jsp de listagem de usuario, e na parte superior da jsp aparece esse menu que foi remontado, ou melhor, era para aparecer, problema é o seguinte, ele não da atualizando a tag rich:toolbar com o binding, eu eu já debugei e tenho certeza que ele ta colocando no HtmlToolbar o menu dropDown e seus HtmlmenuIte.

Codigo que está na jsp que chama esse menu que é montado toda vez para atualizar minhas açoes d acordo com o objeto .
<a4j:form >
				<a4j:outputPanel id="menuAcaoConteudo2">
					<a4j:region rendered="#{workflowMenuAcaoMB.menuAcaoState}" >
						<div align="right">
							<rich:toolBar style="width: 200px;" width="50%"  binding="#{workflowMenuAcaoMB.menuAcao}" />
						</div>
					</a4j:region>
				</a4j:outputPanel>
			</a4j:form>

Codigo do MB que manipula esse menuAcao

private HtmlToolBar menuAcao;
	private String managedBean;
	private String classeMB;

	public WorkflowMenuAcaoFaces(){
		menuAcao = new HtmlToolBar();
	}

	//Metodo recebendo meu objeto + usuarioLogado
	//pego a fase, classe e managedBean

	public void montaMenuAcao(HtmlToolBar menuAcao,String managedBean, String classeMB){
		menuAcao.getChildren().clear();
		//pega o managedBean
		if(managedBean!=null){
			Object faces = null;
			if(classeMB == null){
				faces = JsfUtil.getManagedBean(managedBean);
			}else{
				JsfUtil.instanciaManagedBean(managedBean,classeMB);
				faces = JsfUtil.getManagedBean(managedBean);
			}
			//pega o metodo do objeto
			Method metodoObjetoControlado = JsfUtil.getMetodoObjeto("getObjetoControlado", faces);
			Method metodoCurrentState = JsfUtil.getMetodoObjeto("getCurrentState", faces);

			//Chamamos o método getObjetoControlado de cada Face (todos terao um metodo desse)
			Object objetoControlado = null;
			String currentState = null;
			if (metodoObjetoControlado != null){
				//invoca metodo que pega o objetoControlado
				objetoControlado = JsfUtil.invocarMetodoObjeto(metodoObjetoControlado, faces);
				//invoca o metodo que pega o currentState
				currentState = (String)JsfUtil.invocarMetodoObjeto(metodoCurrentState, faces);

				//lista as fasesAcao e constroi o menu
				List<FaseAcaoTO> faseAcoes = workFlowService.listarFaseAcao(objetoControlado, currentState, getUsuarioLogado());
				if(faseAcoes.size() > 0){
					constroiMenuAcao(menuAcao, faseAcoes);
				}
			}
		}
	}

	public HtmlToolBar getMenuAcao() {
		if (menuAcao != null && menuAcao.getChildCount() > 0){
			return menuAcao;
		}
		return null;
	} 

	public void setMenuAcao(HtmlToolBar menuAcao) {
		montaMenuAcao(menuAcao, getManagedBean(), getClasseMB());
		this.menuAcao = menuAcao;
	}

	public boolean isMenuAcaoState(){
		if (menuAcao != null && menuAcao.getChildCount() > 0){
			return true;
		}
		return false;
	}

	public String getManagedBean() {
		return managedBean;
	}

	public void setManagedBean(String managedBean) {
		this.managedBean = managedBean;
	}

	public String getClasseMB() {
		return classeMB;
	}

	public void setClasseMB(String classeMB) {
		this.classeMB = classeMB;
	}

Tá foda, to só dependendo disso pra continuar a fazer minha aplicação, detalhe, essa classe é chamada por um listerner que esta ligada a todos os menus que estão no menu superior, que é estatico na aplicação montado uma vez fica até deslogar, esse MB que manipula o menuAcao é de sessão! Obrigado

Pedro_Java

Detalhe isso não esta funcionando porque eu coloco esse menuAcão em um template, intão o jsp está sempre na pagina, e ele só dá o get para montar o menu na primeira vez, se eu colocar essa chamada em cada jsp, da certo, mas ai eu não vou ter uma coisa generica!

Criado 24 de setembro de 2008
Ultima resposta 25 de set. de 2008
Respostas 3
Participantes 2