CommandLink extends the standard h:commandLink with ajax, partial processing and confirmation features.
Documentation<h:form> <p:growl id="growl" life="2000" /> <p:commandLink id="ajax" update="growl" action="#{buttonView.buttonAction}" style="margin-right:20px;"> <h:outputText value="Ajax Submit" /> </p:commandLink> <p:commandLink id="nonAjax" action="#{buttonView.buttonAction}" style="margin-right:20px;" ajax="false"> <h:outputText value="Non-Ajax Submit" /> </p:commandLink> </h:form>
@Named @RequestScoped public class ButtonView { private MenuModel model; @PostConstruct public void init() { model = new DefaultMenuModel(); //First submenu DefaultMenuItem item = DefaultMenuItem.builder() .value("External") .url("http://www.primefaces.org") .icon("pi pi-home") .build(); DefaultSubMenu firstSubmenu = DefaultSubMenu.builder() .label("Dynamic Submenu") .addElement(item) .build(); model.getElements().add(firstSubmenu); //Second submenu item = DefaultMenuItem.builder() .value("Save") .icon("pi pi-save") .function((i) -> save()) .update("messages") .build(); DefaultSubMenu secondSubmenu = DefaultSubMenu.builder() .label("Dynamic Actions") .addElement(item) .build(); item = DefaultMenuItem.builder() .value("Delete") .icon("pi pi-times") .command("#{buttonView.delete}") .ajax(false) .build(); secondSubmenu.getElements().add(item); model.getElements().add(secondSubmenu); } public MenuModel getModel() { return model; } public String save() { addMessage("Data saved"); return null; } public void update() { addMessage("Data updated"); } public void delete() { addMessage("Data deleted"); } public void buttonAction() { addMessage("Welcome to PrimeFaces!!"); } public void addMessage(String summary) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null); FacesContext.getCurrentInstance().addMessage(null, message); } }