【问题标题】:PrimeFaces view with dynamic added component具有动态添加组件的 PrimeFaces 视图
【发布时间】:2018-01-04 11:39:28
【问题描述】:

我需要 PrimeFaces 中的动态视图。视图必须构建到运行时并添加 PrimeFaces 组件。

在我的视图中,我有一个面板网格并添加了来自支持 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>

我的支持豆

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 中是否有任何问题导致 setter 无法工作?

【问题讨论】:

    标签: jsf primefaces uicomponents


    【解决方案1】:

    在您的方法 setUiComponents() 中,您正在创建带有小写“t”的值表达式“#{editor.str_text}”,但是您的 getter 和 setter 以大写“T”命名。当您单击第一个命令按钮时,您可能会在应用程序日志中看到 PropertyNotFoundException,表明它无法创建值表达式。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 2015-06-16
      • 2012-12-08
      相关资源
      最近更新 更多