Oi pessoal,
Estou tentando criar uma pagina com rich:tappanel dinamica, porem até agora sem sucesso.
Ao clicar no menu ele deve criar uma tab no meu panelgrid,mais as vezes cria, as vezes some, não esta funcionando.
Será que alguem tem alguma dica ?
Segue codigo JAVA TAB:
public class TabControle {
private HtmlPanelGrid panelGrid;
private HtmlTabPanel tabPanel;
private String DYN_TAB_PANEL = "dynTabPanel";
private Map<String, HtmlTab> mapaTabs = new HashMap<String, HtmlTab>();
//Teste
private static int count;
private String nomeTab;
public String getNomeTab() {
return nomeTab;
}
public void setNomeTab(String nomeTab) {
this.nomeTab = nomeTab;
}
public HtmlPanelGrid getPanelGrid() {
// Cria Panel Grid
panelGrid = (HtmlPanelGrid) FacesContext.getCurrentInstance()
.getApplication().createComponent(HtmlPanelGrid.COMPONENT_TYPE);
panelGrid.setStyle("width:100%;height:100%");
// Criação da Tab Home
HtmlTab tabHome;
tabHome = (HtmlTab) FacesContext.getCurrentInstance().getApplication()
.createComponent(HtmlTab.COMPONENT_TYPE);
tabHome.setLabel("Home");
tabHome.setId("IdHome");
// Criação do Tab Panel
tabPanel = (HtmlTabPanel) FacesContext.getCurrentInstance()
.getApplication().createComponent(HtmlTabPanel.COMPONENT_TYPE);
tabPanel.setSwitchType("ajax");
tabPanel.setId(DYN_TAB_PANEL);
tabPanel.getChildren().clear();
// Adiciona Tab Home
tabPanel.getChildren().clear();
tabPanel.getChildren().add(tabHome);
// Adiciona o Tab Panel
panelGrid.getChildren().clear();
panelGrid.getChildren().add(tabPanel);
// Limpa HashMap das Tabs
mapaTabs.clear();
return panelGrid;
}
public void setPanelGrid(HtmlPanelGrid panelGrid) {
this.panelGrid = panelGrid;
}
public void deleteTab(ActionEvent event) {
// Recebe Id da Tab que será deletada
String tabId = FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("tabToDelete");
// Busca Tab no HashMap com o Id recebido
HtmlTab tabDel = mapaTabs.get(tabId);
// Se a Tab existir, exclui do Tab Panel e do HashMap
if (tabDel != null) {
tabPanel.getChildren().remove(tabDel);
panelGrid.getChildren().clear();
panelGrid.getChildren().add(tabPanel);
mapaTabs.remove(tabId);
}
}
public void addTabTeste(ActionEvent event) {
HtmlTab htmlTab = new HtmlTab();
count++;
htmlTab.setLabel(nomeTab);
htmlTab.setId("A".concat(count + ""));
htmlTab.setValue("A".concat(count + ""));
tabPanel.getChildren().add(htmlTab);
panelGrid.getChildren().clear();
panelGrid.getChildren().add(tabPanel);
}
public void addTab(ActionEvent event) {
// Recebe Id da Tab que será adicionada
String tabId = FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("tabToAdd");
// Verifica se a Tab já foi adicionada ao panel
HtmlTab tabAdd = mapaTabs.get(tabId);
// Se tab não foi criada
if (tabAdd == null) {
// Cria nova Tab
HtmlTab htmlTab = (HtmlTab) FacesContext.getCurrentInstance()
.getApplication().createComponent(HtmlTab.COMPONENT_TYPE);
htmlTab.setLabel(tabId);
htmlTab.setId(tabId);
htmlTab.setValue(tabId);
// Cria Panel Group, para adicionar o Label da Tab e o Icone de fechar
HtmlPanelGroup panelGroup = (HtmlPanelGroup) FacesContext
.getCurrentInstance().getApplication()
.createComponent(HtmlPanelGroup.COMPONENT_TYPE);
panelGroup.setId("PanelGrp" + tabId);
//Label da Tab
HtmlOutputText label = new HtmlOutputText();
label.setValue(htmlTab.getLabel());
//Imagem de Fechar Tab
HtmlGraphicImage pic = new HtmlGraphicImage();
pic.setValue("/images/icons/close.png");
pic.setOnclick("deleteTab('" + htmlTab.getId()
+ "');Event.stop(event);");
pic.setStyleClass("hidelink");
//Adiciona Label e Imagem
panelGroup.getChildren().add(label);
panelGroup.getChildren().add(pic);
//Adiciona Panel Group no Facet da Tab
htmlTab.getFacets().put("label", panelGroup);
//Adiciona Tab no TabPanel
tabPanel.getChildren().add(htmlTab);
//Atualiza o PanelGrid
//panelGrid.getChildren().clear();
panelGrid.getChildren().add(tabPanel);
//Adiciona a Tab no HashMap
mapaTabs.put(htmlTab.getId(), htmlTab);
}
}
}
Segue codigo Menu:
public HtmlToolBar criarMenu() {
// Lista de Menus
List<ItemMenu> itens = getItens();
if (itens == null || itens.isEmpty()) {
return menuBar;
}
Map<Long, Map<Long, ItemMenu>> menuTotal = new HashMap<Long, Map<Long, ItemMenu>>();
for (ItemMenu item : itens) {
Long idPai = item.getMenuSuperior() == null ? 0L : item
.getMenuSuperior().getIdMenu();
if (!menuTotal.containsKey(idPai)) {
menuTotal.put(idPai, new HashMap<Long, ItemMenu>());
}
menuTotal.get(idPai).put(item.getIdMenu(), item);
}
return (HtmlToolBar) montarMenuBar(menuTotal, menuBar, 0L);
}
public UIComponent montarMenuBar(Map<Long, Map<Long, ItemMenu>> menuTotal,
UIComponent pai, Long keyPai) {
UIComponent novoPai = null;
Iterator<Long> it = menuTotal.get(keyPai).keySet().iterator();
while (it.hasNext()) {
Long keyFilho = it.next();
ItemMenu item = menuTotal.get(keyPai).get(keyFilho);
// Se o Item não possuir MenuSuperior, cria HtmlDropDownMenu
if (item.getMenuSuperior() == null) {
HtmlDropDownMenu menuDD = new HtmlDropDownMenu();
menuDD = new HtmlDropDownMenu();
menuDD.setValue(item.getNomeMenu());
menuDD.setId("Menu" + item.getIdMenu());
// Se possuir Link, cria evento
//if (item.hasLink()) {
//menuDD.setOnexpand("addTab('" + item.getIdMenu()
// + "');Event.stop(event);");
//}
pai.getChildren().add(menuDD);
novoPai = menuDD;
}
// Se o Item possuir sub-menus, cria HtmlMenuGroup
else if (menuTotal.containsKey(keyFilho)) {
HtmlMenuGroup menuGrp = new HtmlMenuGroup();
menuGrp.setValue(item.getNomeMenu());
menuGrp.setId("Menu" + item.getIdMenu());
pai.getChildren().add(menuGrp);
novoPai = menuGrp;
}
// Senão, cria HtmlMenuItem
else {
HtmlMenuItem menuItem = new HtmlMenuItem();
menuItem.setValue(item.getNomeMenu());
menuItem.setId("Menu" + item.getIdMenu());
// Se possuir Link, cria evento
if (!item.hasLink()) {
//menuItem.setOnselect("addTab('Id" + item.getIdMenu()
// + "');Event.stop(event);");
menuItem.setOnselect("addTabTeste();Event.stop(event);");
}
pai.getChildren().add(menuItem);
novoPai = menuItem;
}
// Cria os sub-menus para os itens HtmlDropDownMenu ou HtmlMenuGroup
if (menuTotal.containsKey(keyFilho)) {
montarMenuBar(menuTotal, novoPai, keyFilho);
}
}
return pai;
}
Segue view:
<h:panelGrid id="tabs" binding="#{tabControle.panelGrid}" />
<a4j:jsFunction id="deleteFunc" reRender="tabs" name="deleteTab"
actionListener="#{tabControle.deleteTab}">
<f:param name="tabToDelete" />
</a4j:jsFunction>
<a4j:jsFunction id="addFunc" reRender="tabs" name="addTab"
actionListener="#{tabControle.addTab}">
<f:param name="tabToAdd" />
</a4j:jsFunction>
Fico no aguardo e obrigado.