Colegas,
Tinha um menu dinâmico com jsf puro e agora preciso fazer o mesmo usando o seam.
Pois bem, na classe abaixo se coloco a anotação "@In EntityManager em" quando clico no botão Proceed recebo a exception:
[color=red]
SEVERE: JSF1054: (Phase ID: RESTORE_VIEW 1, View ID: /homeAdmin.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@73efe4ac]
[/color]
Sem a anotação "@In EntityManager em" o menú é renderizado porém não executa "minhaAction.doAnyting"
Onde estou errando? A propósito vc tem um exemplo de um menú dinâmico (buscando os itens do banco de deados) que rode no seam?
Muito obrigado,
Marques
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="layout/templateAdmin.xhtml">
<ui:define name="right">
<h:form>
<h:panelGrid columns="1">
<rich:panelMenu style="width: 175px;" mode="node"
expandSingle="true" iconExpandedGroup="disc"
iconCollapsedGroup="disc" iconExpandedTopGroup="chevronUp"
iconGroupTopPosition="right" iconCollapsedTopGroup="chevronDown"
binding="#{testeMenu.menu}">
</rich:panelMenu>
<h:commandButton id="proceed" value="Proceed"
action="#{testeMenu.sayHello}" />
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
@Name("testeMenu")
public class TesteMenu implements Serializable{
@In
EntityManager em;
@In
FacesContext facesContext;
private HtmlPanelMenu menu;
private HtmlPanelMenuGroup group;
private HtmlPanelMenuItem item;
@Create
public void buildMenu() {
Application app = facesContext.getApplication();
menu = (HtmlPanelMenu) app.createComponent(HtmlPanelMenu.COMPONENT_TYPE);
group = (HtmlPanelMenuGroup) app.createComponent(HtmlPanelMenuGroup.COMPONENT_TYPE);
item = (HtmlPanelMenuItem) app.createComponent(HtmlPanelMenuItem.COMPONENT_TYPE);
group.setLabel("Grupo");
item.setLabel("Item");
item.setName("1");
item.setActionExpression(getOutcome("minhaAction.doAnyting"));
group.getChildren().add(item);
menu.getChildren().add(group);
//Codigo onde acesso o banco para popular menu que substituirá essas linhas de teste acima
}
public MethodExpression getOutcome(String outcome) {
FacesContext fc = FacesContext.getCurrentInstance();
ELContext ec = fc.getELContext();
return fc
.getApplication()
.getExpressionFactory()
.createMethodExpression(ec, "#{" + outcome + "}", String.class,
new Class[] {});
}
public void sayHello() {
System.out.println("Hello People");
}
public HtmlPanelMenu getMenu() {
return menu;
}
public void setMenu(HtmlPanelMenu menu) {
this.menu = menu;
}
}