2014-01-28 93 views
0

你們有人可以解釋我,爲什麼第一個代碼的作品,另一個不是?從一個豆到另一個豆託管的財產

工作:

<h:commandButton value="#{settingsBean.tmp}" action="editverteilerliste"> 
    <f:setPropertyActionListener target="#{settingsEditVerteilerlisteBean.aktuelleVerteilerliste}" value="#{settingsBean.tmp}" /> 
</h:commandButton> 

不工作:

<p:commandLink action="editverteilerliste"> 
    <f:param name="aktuelleVerteilerliste" value="#{settingsBean.tmp}" /> 
    <h:outputText value="asdf"/> 
</p:commandLink> 

settingsBean.tmp是Verteilerliste的實例

行動editverteilerliste導致其使用settingsEditVerteilerlisteBean另一頁:

@ManagedBean 
@RequestScoped 
public class settingsEditVerteilerlisteBean implements Serializable { 

    private Logger logger = Logger.getLogger(settingsEditVerteilerlisteBean.class); 

    public settingsEditVerteilerlisteBean() { 
    } 

    @PostConstruct 
    public void init() { 
    logger.info("Postconstructor invoked!"); 
    } 

    @ManagedProperty(value = "#{aktuelleVerteilerliste}") 
    private Verteilerliste aktuelleVerteilerliste; 

    [Getter and Setter...] 
} 

第二頁:

<h:body> 
    <ui:composition template="../template/mainlayout.xhtml"> 
     <ui:define name="content"> 
      <h3>Verteilerliste <h:outputText value="#{settingsEditVerteilerlisteBean.aktuelleVerteilerliste.name}"/></h3> 
     </ui:define> 
    </ui:composition> 
</h:body> 

我知道我可以使用工作之一,但我想知道爲什麼第二個好好嘗試一下工作!

回答

1

第二個不起作用,因爲您的託管屬性綁定已解析爲null,因爲在任何JSF範圍的映射中,極有可能沒有aktuelleVerteilerliste密鑰的元素。

要做出第二個工作,您需要告訴JSF查看給定請求的參數,即更改爲@ManagedProperty(value = "#{param['aktuelleVerteilerliste']}")

爲了使區別更加清楚,<f:setPropertyActionListener>簡單地等於在JSF生命週期的調用應用程序階段target對象value而後者的方法簡單地增加一個特定參數,以JSF組件,這是命令組件在你的情況,和命令組件參數可以通過EL對象param訪問,該對象是當前請求參數的映射。


也就是說,您對命令鏈接的使用被認爲是不好的做法。當表單被提交以執行一些業務工作時,它們用於調用某些服務器端邏輯。在你的情況下,你正在使用它們來執行簡單的導航。爲此,最好使用<h:link>組件創建簡單的a元素。這樣,如果你附加一個參數,你將最終得到一個查詢參數,如editverteilerliste?aktuelleVerteilerliste=something,你可以通過<f:viewParam>獲得視圖。這樣你就可以在應用程序中獲得可收藏的URL和清晰的導航。

+0

至於''的東西,另見其他http://stackoverflow.com/q/6377798和http://stackoverflow.com/a/8464636 – BalusC

+0

非常感謝! –