setPropertyActionListener внутри командной ссылки не работает

Я столкнулся с этой проблемой, когда я развертывал приложение Grails на AWS. Это вопрос драйвера JDBC по умолчанию для драйвера org.h2. Как вы можете видеть это в Datasource.groovy внутри вашей папки конфигурации. Как вы можете видеть ниже:

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"   // make this one comment
    username = "sa"
    password = ""
}

Прокомментируйте эти строки везде, где упоминается org.h2.Driver в файле datasource.groovy, если вы не используете эту базу данных. В противном случае вам нужно загрузить этот файл jar базы данных.

Спасибо.

0
задан nullpointer 30 January 2019 в 08:26
поделиться

2 ответа

Это ошибка в PrimeFaces (я думаю). Я искал много тестов в минимальном тестовом приложении. Невозможно использовать следующее созвездие:

<p:dataTable value="#{bean.list}" var="myVar".....
  <p:ajax event="rowSelect" partialSubmit="true" process="@this" listener="#{bean.doWork(myVar)}"/>

bean.doWork() всегда будет вызываться с нулевым указателем.

Glassfish 4.1.1 PrimeFaces 6.2

Я думаю, что ваша проблема та же.

0
ответ дан Holger 30 January 2019 в 08:26
поделиться

Ваш код работает просто отлично. Все, что мне нужно было сделать, - это изменить некоторые атрибуты update= (так как я получал исключения из-за отсутствия компонентов назначения). После заполнения случайными данными и использования приведенного выше кода я получаю следующее:

enter image description here

Я тестировал обе версии PrimeFaces 6.1 и 6.2 на Мохарре 2.3.3.99. Обратный вызов компонента поддержки для кнопки редактирования в диалоговом окне также вызывается правильно.

Итак, следующая вещь, которую нужно проверить - какую реализацию JSF вы используете? Это Мохарра или MyFaces? какая версия ? Возможно, вы столкнулись с какой-то ошибкой в ​​вашей конкретной реализации. В вашем коде нет ничего плохого.

Пока я в этом, я мог бы также опубликовать полный код (включая мои модификации);

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Costing type Test</title>
    </h:head>
    <h:body>
        <h:form id="costingTypeForm" >              
            <p:tabView id="tabView">
                <p:tab id="tab1" title="Costing Type">                                          
                    <p:dataTable
                        id="costingTypeTable"
                        value="#{costingTypeBean.costingTypeList}"
                        var="costingType"
                        paginator="true"
                        style="width:80%; text-align:center;"
                        sortMode="single" >

                        <f:facet name="header">  
                            Costing Type
                            <p:commandButton value="Add" oncomplete="PF('addCostingTypeDialog').show()" update="@form" icon="ui-icon-plus" style="float:right;" />
                            <div style="clear:both" />  
                        </f:facet> 
                        <p:column sortBy="#{costingType.name}"
                              filterBy="#{costingType.name}"
                              filterMatchMode="contains"
                              filterFunction="#{filterUtil.containsFilter}"
                              filterStyle="width:80%;"
                              headerText="Name">
                            <p:outputLabel id = "name" value="#{costingType.name}"  />
                        </p:column>                                             
                        <p:column headerText="Description">
                            <p:outputLabel id = "description" value="#{costingType.nameDesc}"  />
                        </p:column>
                        <p:column headerText="Budgeted">
                            <p:outputLabel value="Yes" rendered="#{costingType.budget}" />
                            <p:outputLabel value="No" rendered="#{not costingType.budget}" />
                        </p:column>
                        <p:column headerText="Deleted">
                            <p:outputLabel value="Yes" rendered="#{costingType.del}" />
                            <p:outputLabel value="No" rendered="#{not costingType.del}" />
                        </p:column>             
                        <p:column>
                            <p:commandLink
                                oncomplete="PF('editCostingTypeDialog').show()"
                                update=":costingTypeForm:tabView:editCostingTypeForm"
                                value="Edit" action="#{costingTypeBean.checkEdit}">
                                <f:setPropertyActionListener target="#{costingTypeBean.editCostingType}" value="#{costingType}"/>
                            </p:commandLink>                                    
                        </p:column>                                 
                    </p:dataTable>                              
                    <p:dialog
                        header="Edit Costing Type"
                        widgetVar="editCostingTypeDialog"
                        modal="true"
                        showEffect="slide"
                        hideEffect="fade"
                        resizable="false"
                        closable="false">
                        <p:outputPanel id="editCostingTypeForm">
                            <p:panelGrid columns="2" rendered="#{not empty costingTypeBean.editCostingType}">                                       
                                <h:panelGroup>
                                    <p:outputLabel value="Name:" />
                                    <p:outputLabel value="*" style="color:red;" />
                                </h:panelGroup>
                                <p:inputText value="#{costingTypeBean.editCostingType.name}" required="true" requiredMessage="Name is required" />

                                <h:panelGroup>
                                    <p:outputLabel value="Description:" />
                                    <p:outputLabel value="*" style="color:red;" />
                                </h:panelGroup>
                                <p:inputText value="#{costingTypeBean.editCostingType.nameDesc}" required="true" requiredMessage="Description is required" />

                                <p:outputLabel value="Budgeted:" />
                                <p:selectOneMenu value="#{costingTypeBean.editCostingType.budget}">
                                    <f:selectItem itemValue="true" itemLabel="Yes" />
                                    <f:selectItem itemValue="false" itemLabel="No" />
                                </p:selectOneMenu>

                                <h:outputLabel value="Deleted:" />
                                <p:selectOneMenu value="#{costingTypeBean.editCostingType.del}">
                                    <f:selectItem itemValue="true" itemLabel="Yes" />
                                    <f:selectItem itemValue="false" itemLabel="No" />
                                </p:selectOneMenu>
                            </p:panelGrid>                                  
                            <p:commandButton
                                value="Cancel"
                                actionListener="#{costingTypeBean.cancelChange}"
                                oncomplete="PF('editCostingTypeDialog').hide();"
                                icon="ui-icon-close"
                                style="float:right;margin-top:10px;margin-bottom:10px;" />                                  
                            <p:commandButton
                                value="Edit"
                                actionListener="#{costingTypeBean.updateCostingType}"
                                oncomplete="if(args.update) PF('editCostingTypeDialog').hide();"
                                update="@form"
                                icon="ui-icon-disk"
                                style="float:right;margin-top:10px;margin-right:10px;margin-bottom:10px;" />
                        </p:outputPanel>
                    </p:dialog>
                </p:tab>                                        
            </p:tabView>
        </h:form>
    </h:body>
</html>

А вот вспомогательный компонент (пример использует Lombok и Apache Commons); [1110 ]

@Data
@Named
@ViewScoped
public class CostingTypeBean implements Serializable {
    private CostingType costingType;
    private CostingType editCostingType;
    private List<CostingType> costingTypeList;

    @PostConstruct
    private void init() {
        costingTypeList = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            final String name = RandomStringUtils.randomAlphanumeric(10);
            final String nameDesc = RandomStringUtils.randomAlphanumeric(10);
            final boolean budget = RandomUtils.nextBoolean();
            final boolean del = RandomUtils.nextBoolean();

            costingTypeList.add(new CostingType(name, nameDesc, budget, del));
        }
    }

    public void updateCostingType(ActionEvent event) {
        System.out.println("update!");
    }

    public void checkEdit() {
        System.out.println("Edit listener");
    }

    public void cancelChange() {
        System.out.println("Cancel");
    }

    @Data
    @AllArgsConstructor
    public class CostingType {
        private String name;
        private String nameDesc;
        private boolean budget;
        private boolean del;
    }
}

Надеюсь, это поможет.

0
ответ дан Adam Waldenberg 30 January 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: