2013-07-02 89 views
1

我嘗試通過菜單項設置普通屬性,但它不起作用。jsf menuitem沒有設置屬性

JSF:

<p:menuitem value="Names" 
      url="/master.xhtml" 
     action="#{navigation.name}"> 

     <f:setPropertyActionListener target="navigation.name" 
     value="Billy" /> 
</p:menuitem> 

ManagedBean:

@ManagedBean(name="navigation") 
@SessionScoped // 
public class LinksNavigation { 

    public LinksNavigation() { 
     super(); 
     this.milchFleisch = "./menuFleisch.xhtml"; 
    } 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name= name; 
    } 

} 

但它不工作。我不設置「f:setPropertyActionListener」 value =「Bully」。我怎樣才能通過menuItem設置屬性值?

感謝

回答

0

setPropertyActionListener你有String而不是EL表達式。更改

target="navigation.name" 

target="#{navigation.name}" 

此外,你需要仔細看看在the tag documentation爲​​。屬性action正在等待一個方法表達式。您將通過代碼設置的方式獲得MethodNotFoundException。您需要更改

action="#{navigation.name}" 

action="#{navigation.getName}" 

縮寫語法#{navigation.name}用於值表達式

您在混合導航方法。對於相同的p:menuItem,您不能將urlaction的屬性放在一起。當我測試您的代碼actionsetPropertyActionListener時,url存在時從未被調用。這種行爲表明你必須選擇一個或另一個。

COMMENT

根據您的樣品,我認爲你應該重新考慮你的方法。讓我們暫時假裝你決定不使用url="/master.xhtml",讓我們來看看事件的順序。按下菜單項後,#{navigation.name}中的表達式將首先將值「Billy」設置爲您的name屬性(例如navigation.setName("Billy"))。然後在屬性action中的表達式#{navigation.getName}將調用getName()。現在,動作將具有String值「Billy」,它將嘗試導航到Billy.xhtml(假設在faces-config中沒有導航規則,並且您有JSF 2.0)。如果這是你所追求的行爲,或者你在faces-config中設置了規則,並且你沒有對價值進行硬編碼,那麼這完全是另一回事。請牢記這一點。