如何通过单击菜单栏上的菜单项来激活打开的最后打开的选项卡?

时间:2012-07-24 07:12:48

标签: ajax jsf-2 primefaces

我创建了一个Web应用程序。在这里,我使用prime-face选项卡和ajax。 当我点击菜单栏上的菜单项时,它会打开一个新标签。但是激活了第一个打开的标签。我想激活最后打开的标签。 我的代码在这里:

表示菜单栏和输出标签

<h:form id="menu">                
            <p:menubar autoDisplay="true">
               <p:submenu id="student" label="Student">       
                    <p:menuitem id="studentAdmission" value="Student Admission" action="#{ajaxBean.editAction}" ajax="true" update=":outputForm">
                        <f:setPropertyActionListener target="#{ajaxBean.action}" value="StudentAdmission" />
                    </p:menuitem>
                    <p:menuitem id="studentList" value="Student Profile" action="#{ajaxBean.editAction}" ajax="true" update=":outputForm">
                        <f:setPropertyActionListener target="#{ajaxBean.action}" value="StudentProfile" />
                    </p:menuitem>                        
                </p:submenu>
                <p:submenu id="registration" label="Registration">
                    <p:menuitem id="registrationAdd" value="Subject Registration" action="#{ajaxBean.editAction}" ajax="true"  update=":outputForm">
                        <f:setPropertyActionListener target="#{ajaxBean.action}" value="SubjectRegistration"/>                                 
                    </p:menuitem>
                    <p:menuitem id="registrationList" value="List of Registration" action="#{ajaxBean.editAction}" ajax="true" update=":outputForm">
                        <f:setPropertyActionListener target="#{ajaxBean.action}" value="RegistrationList" />
                    </p:menuitem>                        
                </p:submenu>
            </p:menubar>
        </h:form>       
        <h:form id="outputForm">
            <p:tabView id="outputTab">
                <p:ajax event="tabClose" listener="#{ajaxBean.closeTab}"/>
                <c:forEach items="#{ajaxBean.chcekItem}" var="item" varStatus="loop">
                    <p:tab id="#{item}" title="#{item}" closable="true">                            
                        <ui:include src="#{bundle[item]}"/>   

                    </p:tab>
                </c:forEach>
            </p:tabView>
        </h:form>

ajaxBean.java

package com.ajax;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.TabCloseEvent;

/**
 *
 * @author DELL
 */
@ManagedBean(name = "ajaxBean")
@SessionScoped
public class AjaxBean implements Serializable {

public AjaxBean() {
}
private boolean input;
private List<String> chcekItem = new ArrayList<String>();

public void setAction(String action) {
    input = true;
    if (getChcekItem().isEmpty()) {
        getChcekItem().add(action);
        System.out.println("The item " + action + " is Successfully Added to array");
    } else {

        for (String abce : getChcekItem()) {
            if (abce.equals(action)) {
                System.out.println(abce + "=" + action);
                input = false;
                //We can jump out of the loop here since we already found a matching value
                break;
            }
        }

        if (input) {
            getChcekItem().add(action);
            System.out.println("The item " + action + " is Successfully Added to array");
        } else {
            System.out.println("The item " + action + " is Exist");
        }
    }


}
private String close;

public void closeTab(TabCloseEvent closeAction) {
    close = closeAction.getTab().getId();
    for (String abce : getChcekItem()) {
        if (abce.equals(close)) {
            System.out.println(close + " is remove from Array");
            getChcekItem().remove(abce);
            //We can jump out of the loop here since we already found a matching value
            break;
        }
    }
}

public String editAction() {
    return null;
}

/**
 * @return the arrJavaTechnologies
 */
/**
 * @return the chcekItem
 */
public List<String> getChcekItem() {
    return chcekItem;
}

/**
 * @param chcekItem the chcekItem to set
 */
public void setChcekItem(ArrayList<String> chcekItem) {
    this.chcekItem = chcekItem;
}

/**
 * @return the input
 */
public boolean isInput() {
    return input;
}

/**
 * @param input the input to set
 */
public void setInput(boolean input) {
    this.input = input;
}
 /**
 * @return the menuaction
 */

}

item.java

package com.ajax;


public class Item {

public Item() {
}
private String value;

public Item(String value) {
    this.value = value;
}

public void setValue(String value) {
    this.value = value;
}

public String getValue() {
    return value;
}
}

MenuManagedBean.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
  */
package com.ajax;

import java.util.ArrayList;
import java.util.Iterator;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author DELL
 */
@ManagedBean(name = "menuManagedBean")
@SessionScoped
public class MenuManagedBean {

/** Creates a new instance of MenuManagedBean */
public MenuManagedBean() {
}

private String menuItems;
private ArrayList<String> menuId=new ArrayList<String>();

public void tabGenerate(String event){
    this.menuItems=event;
    getMenuId().add(event);

    Iterator iterator=getMenuId().iterator();
    while(iterator.hasNext()){
        System.out.println("Items : " +iterator.next());
    }
}

/**
 * @return the menuId
 */
public ArrayList<String> getMenuId() {
    return menuId;
}

/**
 * @param menuId the menuId to set
 */
public void setMenuId(ArrayList<String> menuId) {
    this.menuId = menuId;
}
}

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

在jsf页面添加流动命令:

  <p:tabView id="outputTab" activeIndex="#{ajaxBean.count}">

更改ajaxBean.java流动:

  @ManagedBean(name = "ajaxBean")
  @SessionScoped
  public class AjaxBean implements Serializable {

  public AjaxBean() {
  }
  private boolean input;
  private List<String> chcekItem = new ArrayList<String>();
  private int count;

  public void setAction(String action) {
  input = true;
  if (getChcekItem().isEmpty()) {
    count++;
    getChcekItem().add(action);
    System.out.println("The item " + action + " is Successfully Added to array");
  } else {

    for (String abce : getChcekItem()) {
        if (abce.equals(action)) {
            System.out.println(abce + "=" + action);
            input = false;
            //We can jump out of the loop here since we already found a matching value
            break;
        }
    }

    if (input) {
        count++;
        getChcekItem().add(action);
        System.out.println("The item " + action + " is Successfully Added to array");
    } else {
        System.out.println("The item " + action + " is Exist");
    }
    }


   }
    private String close;

   public void closeTab(TabCloseEvent closeAction) {
  close = closeAction.getTab().getId();
  for (String abce : getChcekItem()) {
    if (abce.equals(close)) {
        count--;
        System.out.println(close + " is remove from Array");
        getChcekItem().remove(abce);

        //We can jump out of the loop here since we already found a matching value
        break;
      }
      }  
      }

     public String editAction() {
           return null;
                    }


        public List<String> getChcekItem() {
           return chcekItem;
           }


       public void setChcekItem(ArrayList<String> chcekItem) {
           this.chcekItem = chcekItem;
          }


       public boolean isInput() {
            return input;
          }

       public void setInput(boolean input) {
                this.input = input;
         }

       public int getCount() {
           return count-1;
        }


      public void setCount(int count) {
       this.count = count;
      }

     }