2012-01-23 2 views
1

처럼 내 코드입니다 : 나는 메뉴 항목을 클릭 할 때이 코드를 실행하는 경우동적 메뉴 항목 및 ActionExpression

@ManagedBean 
@RequestScoped 
public class MenuBean { 

    private MenuModel model; 

    public MenuBean() { 
     FacesContext facesCtx = FacesContext.getCurrentInstance(); 
     ELContext elCtx = facesCtx.getELContext(); 
     ExpressionFactory expFact = facesCtx.getApplication().getExpressionFactory(); 

     model = new DefaultMenuModel(); 

     Submenu submenu = new Submenu(); 
     submenu.setLabel("Dynamic Submenu 1"); 

     MenuItem item = new MenuItem(); 
     item.setValue("Dynamic Menuitem 1.1"); 
     item.setAjax(false); 
     item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", String.class, new Class[0])); 
     item.setUrl("#"); 

     submenu.getChildren().add(item); 

     model.addSubmenu(submenu); 

     submenu = new Submenu(); 
     submenu.setLabel("Dynamic Submenu 2"); 
     item = new MenuItem(); 
     item.setValue("Dynamic Menuitem 2.1"); 
     item.setAjax(false); 
     item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", String.class, new Class[0])); 
     item.setUrl("#"); 

     submenu.getChildren().add(item); 

     item = new MenuItem(); 
     item.setValue("Dynamic Menuitem 2.2"); 
     item.setAjax(false); 
     item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}",Void.class, new Class[]{Object.class,String.class})); 
     item.setUrl("#"); 
     submenu.getChildren().add(item); 

     model.addSubmenu(submenu); 
    } 

    public MenuModel getModel() { 
     return model; 
    } 

    public String add(Object obj,String nodeId) { 
     return null; 
    } 
} 

이 방법 add()는 결코 실행되지 않습니다 :

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.prime.com.tr/ui"> 
<h:head> 
<title>Facelet Title</title> 
</h:head> 

<f:view contentType="text/html"> 
<h:body> 
    <h:form> 
     <p:menu model="#{menuBean.model}"/> 
    </h:form> 
</h:body> 
</f:view> 
</html> 

내 관리 빈 같은입니다 .

이유가 무엇입니까?

답변

1

어떤 메뉴 항목이 호출되지 않습니까? 이 메뉴 항목에서 add 메소드를 설정하여 String 유형을 리턴하고 인수를 취하지 않습니다.

이 메뉴 항목에서 추가 메소드는 VOID를 반환하고 Object 및 String 인수를 취합니다.

item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", Void.class, new Class[]{Object.class,String.class})); 

ManagedBean 클래스에서 이러한 서명 중 하나와 일치하는 add 메소드가 없습니다.

public String add(){ 
      //TODO: 
    } 

그리고이 줄을 제거 : item.setUrl("#");MenuBean에서

+0

반환 유형을 String으로, 코드를 object 및 String으로 변경했으나 작동하지 않습니다. add 메서드 – Shemil

3

당신은 String를 반환하기 위해 add() 방법을 변경해야합니다.