If I try the same with a List<BigDecimal> or a Map<BigDecimal> the numbers get displayed just fine but updates never happen, the value gets set to null. (I can see the set Method of the e.g. List being called with the correct index even but the value is set to null).
Am I doing something obviously wrong here?
The StringList and StringMap is just for comparison.
We are running on PF 5.1.7, PF Extensions 3.0.0 and Mojarra. Tomcat 8.0
Testpage:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<f:view contentType="text/html">
<h:head>
<title>InputNumber Problem</title>
</h:head>
<h:body>
<h:form>
<p:outputPanel>
Single Number <br/>
<pe:inputNumber value="#{inputNumberController.bigDecimal}"/>
<br/><br/>
DoubleList<br/>
<pe:inputNumber value="#{inputNumberController.doubleList[0]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[1]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[2]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[3]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[4]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[5]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[6]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[7]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[8]}"/>
<pe:inputNumber value="#{inputNumberController.doubleList[9]}"/>
<br/><br/>
BigDecimalList<br/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[0]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[1]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[2]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[3]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[4]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[5]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[6]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[7]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[8]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalList[9]}"/>
<br/><br/>
StringList <br/>
<p:inputText value="#{inputNumberController.stringList[0]}"/>
<p:inputText value="#{inputNumberController.stringList[1]}"/>
<p:inputText value="#{inputNumberController.stringList[2]}"/>
<p:inputText value="#{inputNumberController.stringList[3]}"/>
<p:inputText value="#{inputNumberController.stringList[4]}"/>
<p:inputText value="#{inputNumberController.stringList[5]}"/>
<p:inputText value="#{inputNumberController.stringList[6]}"/>
<p:inputText value="#{inputNumberController.stringList[7]}"/>
<p:inputText value="#{inputNumberController.stringList[8]}"/>
<p:inputText value="#{inputNumberController.stringList[9]}"/>
<br/><br/>
BigDecimalMap <br/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[0]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[1]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[2]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[3]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[4]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[5]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[6]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[7]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[8]}"/>
<pe:inputNumber value="#{inputNumberController.bigDecimalMap[9]}"/>
<br/><br/>
StringMap <br/>
<p:inputText value="#{inputNumberController.bigStringMap[0]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[1]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[2]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[3]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[4]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[5]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[6]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[7]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[8]}"/>
<p:inputText value="#{inputNumberController.bigStringMap[9]}"/>
<br/><br/>
<p:commandButton value="save" process="@form" update="@form" />
<p:commandButton value="reset" process="@this" update="@form" action="#{inputNumberController.reset()}" />
</p:outputPanel>
</h:form>
</h:body>
</f:view>
</html>
Code: Select all
package com.signonit.ym.bugs;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@SessionScoped
@ManagedBean(name = "inputNumberController")
public class InputNumberController {
private BigDecimal bigDecimal;
private List<BigDecimal> bigDecimalList;
private List<String> stringList;
private List<Double> doubleList;
private Map<Long, BigDecimal> bigDecimalMap;
private Map<Long, String> bigStringMap;
public InputNumberController() {
initOrReset();
}
private void initOrReset() {
System.out.println("InputNumberController initOrReset");
bigDecimalList = new ArrayList<BigDecimal>(10);
bigDecimalMap = new HashMap<Long, BigDecimal>();
bigDecimal = new BigDecimal("99.999");
bigStringMap = new HashMap<Long, String>();
stringList = new ArrayList<String>();
doubleList = new ArrayList<Double>();
for(int i = 0; i<10; i++) {
bigDecimalList.add(new BigDecimal(i));
bigDecimalMap.put((long)i, new BigDecimal(i));
bigStringMap.put((long)i, new String("String: " + i));
stringList.add(new String("String: " + i));
doubleList.add((double)i);
}
}
public void reset() {
initOrReset();
}
public BigDecimal getBigDecimal() {
System.out.println("getting single bigdecimal: " + bigDecimal);
return bigDecimal;
}
public void setBigDecimal(BigDecimal bigDecimal) {
this.bigDecimal = bigDecimal;
}
public List<BigDecimal> getBigDecimalList() {
return bigDecimalList;
}
public void setBigDecimalList(List<BigDecimal> bigDecimalList) {
this.bigDecimalList = bigDecimalList;
}
public Map<Long, BigDecimal> getBigDecimalMap() {
return bigDecimalMap;
}
public void setBigDecimalMap(Map<Long, BigDecimal> bigDecimalMap) {
this.bigDecimalMap = bigDecimalMap;
}
public Map<Long, String> getBigStringMap() {
return bigStringMap;
}
public void setBigStringMap(Map<Long, String> bigStringMap) {
this.bigStringMap = bigStringMap;
}
public List<String> getStringList() {
return stringList;
}
public void setStringList(List<String> stringList) {
this.stringList = stringList;
}
public List<Double> getDoubleList() {
return doubleList;
}
public void setDoubleList(List<Double> doubleList) {
this.doubleList = doubleList;
}
}