2015-11-26 219 views
0

這是我如何渲染我的複合組件在一個循環內,它的工作原理,但是當我切換到編輯模式並提交新值時,我無法從中檢索它們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); 
    } 

this is where Iam trying to submit, the results you see (testnumber, test name) are coming from the attributeObject, but if I write different values and submit I get the previous results again.

+2

使用XHTML創建組件,而不是Java。在99%的情況下,問題將像魔術一樣自行解決。這裏有一些食物可供閱讀:http://stackoverflow.com/q/14911158 – BalusC

+0

非常感謝balusC這就是我之前做的事情..問題是我有性能問題,因爲Iam迭代了很多字段(高達1500)I是爲每個組件使用呈現的屬性,但我讀的地方渲染的頁面上確實沒有顯示html但是所有這些組件都是在uicomponent樹中構建的。我相信這是這種情況。當我切換到Java代碼時,我能夠操作哪些組件應該得到,不應該堆疊在這棵樹下。閱讀速度更快,Iam試圖在寫作時也這樣做。感謝您的回覆 – theo231022

+0

準確地說,我也嘗試過與c:test並沒有奏效。我有一個鏈接,把它放在這裏,你已經回答了! – theo231022

回答

0

好吧,我想我發現是什麼原因造成的所有瘋狂的性能問題。我在getter中做了一些邏輯,並且因爲getter被多次調用而導致性能問題。

+0

這個答案是關於你在評論這個問題,對吧? – Kukeltje

+0

我很抱歉,我應該回答不同(你是完全正確的)這個問題是因爲我有性能問題。我設法通過使用baligra所說的「渲染屬性」以完全不同的方式修復它們。我剛發現問題出在我的邏輯之內,而不是在jsf組件中。 – theo231022

相關問題