2017-07-28 49 views
-1

我需要PrimeFaces中的一個非常動態的視圖。視圖必須構建到運行時並添加PrimeFaces組件。帶動態添加組件的PrimeFaces視圖

在我的視圖中,我有一個panelgrid並添加了來自backing Bean的元素。我的問題是沒有setter被調用。我添加了一個ValueExpression,並且調用getter,但從來不是setter。

我查看

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:f="http://xmlns.jcp.org/jsf/core"> 
    <h:head> 
     <title></title> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
     <link href="#{request.contextPath}/resources/css/primefaces-9/theme.css" rel="stylesheet" type="text/css"/> 
     <link href="#{request.contextPath}/resources/css/p_css.css" rel="stylesheet" type="text/css"/> 
    </h:head> 
    <h:body style="font-family: Arial; font-size: 8pt;"> 
     <h:form id="buttonForm"> 

      <p:calendar id="test" value="#{editor.dt_vrAufnahmeDatum}" mindate="#{editor.str_currentDate}" navigator="true" locale="de" pattern="dd.MM.yyyy" /> 
      <p:selectOneMenu id="selTest" /> 
      <p:commandButton id="reloadPanelGrid" action="#{editor.setUiComponents()}" value="new" />     
     </h:form> 

     <h:form id="dynaForm"> 

      <p:panelGrid id="tiles" columns="1" > 
       <h:outputText value="hallo" /> 
       <p:commandButton value="Submit" actionListener="#{editor.storeDataVr()}" process="dynaForm"/> 
      </p:panelGrid> 

     </h:form> 
    </h:body> 
</html> 

我支持bean

package com._9.controller.global; 

import java.io.Serializable; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.annotation.PostConstruct; 
import javax.el.ValueExpression; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.component.UISelectItem; 
import javax.faces.component.html.HtmlPanelGroup; 
import javax.faces.context.FacesContext; 
import org.primefaces.component.panelgrid.PanelGrid; 
import org.primefaces.context.RequestContext; 
import org.primefaces.event.SelectEvent; 

@ManagedBean(name = "editor") 
@ViewScoped 
public class Editor implements Serializable 
{ 

    private static final long serialVersionUID = -33430593454354523L; 

    private String str_Text = ""; 


    @PostConstruct 
    public void init() 
    { 

    } 


    public String getStr_Text() 
    { 
     return this.str_Text; 
    } 

    public void setStr_Text(String str_Text) 
    { 
     this.str_Text = str_Text; 
    } 

    public void setUiComponents() 
    { 
     org.primefaces.component.inputtext.InputText inpt_obj = new org.primefaces.component.inputtext.InputText(); 
     inpt_obj.setValueExpression("value", createValueExpression("#{editor.str_text}", String.class)); 

     HtmlPanelGroup tile = new HtmlPanelGroup(); 
     tile.setId("testPanelGroup"); 

     tile.getChildren().add(0, inpt_obj); 


     PanelGrid tiles; 

     tiles = (PanelGrid) FindComponent.doFind(FacesContext.getCurrentInstance(), "dynaForm:tiles"); 

     tiles.getChildren().add(2, tile); 


     RequestContext.getCurrentInstance().update("dynaForm:tiles"); 
    } 

    public ValueExpression createValueExpression(String valueExpression, Class<?> valueType) 
    { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     return facesContext.getApplication().getExpressionFactory().createValueExpression(facesContext.getELContext(), valueExpression, valueType); 
    } 

    public void StoreDataVr() 
    { 
     int i = 0; 
    } 
} 

有沒有在我的setValueExpression導致二傳手到不行什麼問題?

回答

0

在你的setUiComponents()方法中,你用小寫的't'創建值表達式「#{editor.str_text}」,但是你的getter和setter用大寫字母'T'來命名。當您單擊第一個命令按鈕時,您可能會在應用程序日誌中看到PropertyNotFoundException,表示它無法創建值表達式。