這是我如何渲染我的複合組件在一個循環內,它的工作原理,但是當我切換到編輯模式並提交新值時,我無法從中檢索它們InputText。自定義複合組件可以讀取,但不能檢索提供的值
@FacesComponent("customComponent")
public class CustomComponent extends UIInput implements NamingContainer, Serializable {
private static final long serialVersionUID = 1L;
@Override
public String getFamily() {
return UINamingContainer.COMPONENT_FAMILY;
}
private UIComponent component;
private HtmlInputText inputTextValue;
@Override
public void encodeBegin(FacesContext context) throws IOException {
AttributeObject attrObject = (AttributeObject) getAttributes().get("value");
Boolean enableInput = (Boolean) getAttributes().get("enableInput");
if (attrObject.getAttributeValue() != null) {
if (attrObject.getAttributeDescriptor().getDataType() == DataTypeConstants.TEXT && enableInput) {
InputText inputText = new InputText();
inputText.setRequired(true);
inputText.setValueExpression("binding",
createValueExpression("#{searchController.myComponent}", UIComponent.class));
inputText.setId("editableTextId");
inputText.encodeAll(context);
inputText.setParent(this);
component = inputText;
} else if (attrObject.getAttributeDescriptor().getDataType() == DataTypeConstants.TEXT
&& enableInput == false) {
OutputLabel outputLabel = new OutputLabel();
outputLabel.setValue(attrObject.getAttributeValue());
outputLabel.encodeAll(context);
outputLabel.setId("nonEditatbleId");
component = outputLabel;
}
}
}
private ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getApplication().getExpressionFactory()
.createValueExpression(facesContext.getELContext(), valueExpression, valueType);
}
使用XHTML創建組件,而不是Java。在99%的情況下,問題將像魔術一樣自行解決。這裏有一些食物可供閱讀:http://stackoverflow.com/q/14911158 – BalusC
非常感謝balusC這就是我之前做的事情..問題是我有性能問題,因爲Iam迭代了很多字段(高達1500)I是爲每個組件使用呈現的屬性,但我讀的地方渲染的頁面上確實沒有顯示html但是所有這些組件都是在uicomponent樹中構建的。我相信這是這種情況。當我切換到Java代碼時,我能夠操作哪些組件應該得到,不應該堆疊在這棵樹下。閱讀速度更快,Iam試圖在寫作時也這樣做。感謝您的回覆 – theo231022
準確地說,我也嘗試過與c:test並沒有奏效。我有一個鏈接,把它放在這裏,你已經回答了! – theo231022