如何使JSF将空值设置到列表中
为什么JSF不将空值设置回列表(或数组) 例如:如何使JSF将空值设置到列表中,jsf,Jsf,为什么JSF不将空值设置回列表(或数组) 例如: import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("testMB")
@Scope("view")
public class TestMB implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2463416120592801345L;
private List<Double> doublesList;
private List<Integer> integersList;
private Double d = 123.456;
private Integer i = 987;
@PostConstruct
public void init() {
setDoublesList(new ArrayList<Double>());
setIntegersList(new ArrayList<Integer>());
for (int i = 0; i < 7; i++) {
getDoublesList().add(i + 0.123);
getIntegersList().add(i);
}
}
public List<Double> getDoublesList() {
return doublesList;
}
public void setDoublesList(List<Double> doublesList) {
this.doublesList = doublesList;
}
public List<Integer> getIntegersList() {
return integersList;
}
public void setIntegersList(List<Integer> integersList) {
this.integersList = integersList;
}
public Double getD() {
return d;
}
public void setD(Double d) {
this.d = d;
}
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
public void doSomething() {
System.out.println(getDoublesList());
System.out.println(getIntegersList());
System.out.println(d);
System.out.println(i);
}
}
import java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.annotation.PostConstruct;
导入org.springframework.context.annotation.Scope;
导入org.springframework.stereotype.Component;
@组件(“testMB”)
@范围(“视图”)
公共类TestMB实现了可序列化{
/**
*
*/
私有静态最终长serialVersionUID=24634416120592801345L;
私人名单;
私有列表整数列表;
私人双d=123.456;
私有整数i=987;
@施工后
公共void init(){
setDoublesList(新的ArrayList());
setIntegerList(新的ArrayList());
对于(int i=0;i<7;i++){
getDoublesList().add(i+0.123);
getIntegersList().add(i);
}
}
公共列表getDoublesList(){
返回双重列表;
}
公共无效集合doublesList(列表doublesList){
this.doublesList=doublesList;
}
公共列表getIntegersList(){
返回整数列表;
}
public void setIntegersList(List integersList){
this.integersList=integersList;
}
公共双getD(){
返回d;
}
公共无效设置(双d){
这个。d=d;
}
公共整数getI(){
返回i;
}
公共void setI(整数i){
这个。i=i;
}
公共无效剂量测定法(){
System.out.println(getDoublesList());
System.out.println(getIntegersList());
系统输出打印ln(d);
系统输出打印LN(i);
}
}
而这个观点
<!DOCTYPE html>
<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">
<f:view contentType="text/html">
<h:head>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
</f:facet>
</h:head>
<h:body>
<h:form id="form">
<p:fieldset legend="Doubles List">
<ui:repeat varStatus="vs1" value="#{testMB.doublesList}">
#{v.index}
<p:inputText value="#{testMB.doublesList[vs1.index]}">
<f:convertNumber />
</p:inputText>
<br />
</ui:repeat>
</p:fieldset>
<p:fieldset legend="Integers List">
<ui:repeat varStatus="vs2" value="#{testMB.integersList}">
<p:inputText value="#{testMB.integersList[vs2.index]}">
<f:convertNumber integerOnly="true" />
</p:inputText>
<br />
</ui:repeat>
</p:fieldset>
Double:
<p:inputText value="#{testMB.d}">
<f:convertNumber />
</p:inputText>
<br />
<br />
Integer:
<p:inputText value="#{testMB.i}">
<f:convertNumber integerOnly="true" />
</p:inputText>
<br /><br /><br /><br />
<p:commandButton actionListener="#{testMB.doSomething}" update="form" />
</h:form>
</h:body>
</f:view>
</html>
#{v.index}
双重:
整数:
如果列表的字段设置为空字符串,则列表不会像预期的那样使用空值进行更新。它只是保持与以前相同的值
在web.xml中,我有:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.el.parser.COERCE_TO_ZERO</param-name>
<param-value>false</param-value>
</context-param>
javax.faces.explait_EMPTY_STRING_SUBMITTED_VALUES_为_NULL
真的
org.apache.el.parser.convere_为零
假的
但是,如果我将testMB.d
或testMB.I
输入文本的值设置为空字符串,那么在托管bean中将其正确设置为null
那么,JSF、列表和空值有什么问题呢?如何正确实施这一点
谢谢。试着这样做:
<p:commandButton action="#{testMB.doSomething}" update="form" />
我认为actionListener不会更改变量的值。问题已解决
JSF升级。从2.1.10
到2.2.0
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.0</version>
</dependency>
玻璃鱼
javax.faces
2.2.0
谢谢,但碰巧是这样。如果我将任何值更改为与空字符串不同的值,它将更新列表中的值。问题是,只有使用空值,列表才会忽略更新。啊,好的。现在我了解你了!我已经做了。但是我使用了p:datalist而不是ui:repeat,对我来说效果很好:也可以尝试使用p:datalist。在这里,它不会更新任何值,即使它与空字符串不同。但不管怎样,这是什么#{vs2.i}?为什么是“我”?这里它给了我:
在java.math.BigDecimal类型上找不到属性“i”
我从testMB.integers得到的每个交互在vs2中列出一个对象。。。抱歉,这只是vs2,伙计。