我構建了一個複合組件,它接受一個輸入ID並生成一個表。然後,我做它接受使用<f:viewParam>
GET參數的網頁喜歡這樣的:如何將GET參數傳遞給複合組件?
<f:metadata>
<f:viewParam name="id" value="#{aBean.id}" />
</f:metadata>
<util:aCompositeComponent inputId="#{aBean.id}" />
的複合材料部件的標記是:
<cc:interface componentType="compositeComponentBacking">
<cc:attribute name="inputId" type="java.lang.Integer" />
</cc:interface>
<cc:implementation>
/**
Use #{cc.result} to build a HTML table to present a result
**/
</cc:implementation>
和複合組件的支持bean是:
@FacesComponent("compositeComponentBacking")
public class CompositeComponentBacking extends UINamingContainer {
private Integer inputId;
public List<Result> getResult() {
//Use inputId to query service to return result
return result;
}
public Integer getInputId() {
return inputId;
}
public void getInputId(Integer inputId) {
this.inputId = inputId;
}
}
GET參數可以綁定到#{aBean.id}
,但#{aBean.id}
不能傳遞到複合組件,並且它始終在第e複合組件。我如何將GET參數傳遞給複合組件?
更新:
我終於解決.I發現,使用複合材料部件時,如果輸入屬性爲恆定(例如<util:aCompositeComponent inputId="1"/>
),這個常數可以設置爲CompositeComponentBacking
的問題inputId
字段。但如果我使用輸入屬性的複合是一個EL表達式(例如<util:aCompositeComponent inputId="#{aBean.id}"/>
,EL表達式的值不能設置爲CompositeComponentBacking
的inputId
字段。我必須通過在CompositeComponentBacking
內部通過計算#{cc.attrs.inputId}
來獲得該值。正常的行爲?
當您在頁面(組件外部)輸出'#{aBean.id}'時,是否設置了值? – mabi
是的。 #{aBean.id}正確顯示,如果我把它放在組件旁邊,但在組合組件內部,它是空的。 –
顯然你在合成內部訪問/顯示它是錯誤的。很難說,如果你沒有在問題中表現出這一部分。 – BalusC