【问题标题】:p:carousel filled with an array and input text not submitting [duplicate]p:carousel 填充了一个数组并且输入文本未提交 [重复]
【发布时间】:2016-08-07 19:25:45
【问题描述】:

我用数组中的数据填充轮播。我想用轮播中设置的数据来改变数组的数据。

<h:form id="newConditionPanelForm">
    <p:panelGrid id="newConditionPanelGrid">
        <p:row>
            <p:column colspan="2"><h2>Define conditions</h2></p:column>
        </p:row>
        <p:row>
            <p:column>
                <p:outputLabel value="Condition Name:" />
            </p:column>
            <p:column>
                <h:outputText value="#{priceManagementMB.conditions.name}"></h:outputText>
            </p:column>
        </p:row>
        <p:row>
            <p:column colspan="2" style="text-align:center; width:100%">
                <p:carousel id="priceCarousel"
                                        value="#{priceManagementMB.prices}" headerText="Price per hour" 
                                        var="priceEdit"
                                        numVisible="1" 
                                        style="width:100%"
                                        circular="true"
                                        binding="#{carousel}"
                                        responsive="true">
                    <h:panelGrid columns="1">
                        <p:row>
                            <p:column colspan="2">
                                <h:outputText value="#{carousel.rowIndex + 1}h00" />
                            </p:column>
                        </p:row>
                        <p:row>
                            <p:column>
                                <h:outputText value="Price during given Hour: " />
                            </p:column>
                            <p:column>
                                <p:inplace id="inplacePrice" emptyLabel="click here to edit">
                                    <p:inputText id="priceEdit" value="#{priceEdit}">
                                    </p:inputText>
                                </p:inplace>
                            </p:column>
                        </p:row>
                    </h:panelGrid>
                </p:carousel>
            </p:column>
        </p:row>
    </p:panelGrid>
    <h:commandButton value="Submit conditions" update="newConditionPanelGrid" 
                    validateClient="true" action="#{priceManagementMB.updateCondition}">
    </h:commandButton>
</h:form>

轮播中的 inputtext 中的元素没有提交给支持 bean,我无法使用它们。 我做错了什么?我如何在不通过链接或按钮传输 actionPropertyListner 的情况下获取数据?像模糊这样的事件也可以,但我不知道如何使用它,我需要索引和新值。该数组的长度为 24,一天中的每个小时一个。

【问题讨论】:

    标签: arrays jsf primefaces carousel


    【解决方案1】:

    提交后的JSF尝试调用正确的setter。您没有提供有关价格类型的详细信息,但我猜您使用了 java.lang (Float, Double) 中的某个类。

    因此,当您使用 value="#{priceEdit}" JSF 时,请尝试在 Double、Float 上使用 setPriceEdit。详细解释这里How does EL #{bean.id} call managed bean method bean.getId()

    解决方案是将你的类与 setter 一起使用(看看What is the best data type to use for money in java app?)。如果这个类没有设置器,你总是可以用适当的设置器编写你自己的类(包装器)。

    简单示例:

    class MoneyWrapper {
         private YourMoneyType value;
    
         public setValue(YourMoneyType value){
             this.value = value;
         }
    
         public YourMoneyType getValue(){
             return this.value;
         }
    

    }

    比在你的bean中你可以使用数组包含MoneyWrapper的元素。最后在这样的视图中使用它value="#{priceEdit.value}"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 2013-12-30
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多