2013-10-08 10 views
1

Primefaces 3.5.16, JBoss 7.2.0, PE 0.7.1, Mojara 2.1.26, WELD-000900 1.1.10 (Final) Web.xml имеет некоторые элементы конфигурации, config имеет определенные языковые пакеты.Обязательные поля с OmniFaces 1.6.1

Я следующий диалог с некоторыми полями ввода и р: TabView:

<p:dialog> 

    <h:form> 
    <p:tabView binding="#{tabViewEL}"> 
    <p:messages autoUpdate="true"/> 
    <p:tab title="tab1"> 

    <p:inputText value="#{bean.value1}" required="true" /> 
    <p:inputText value="#{bean.value2}" /> 
    <p:selectOneMenu value="#{bean.value3}"> 
     <f:selectItems value="#{bean.items1}"></f:selectItems> 
    </p:selectOneMenu> 
    </p:tab> 
    <p:tab> ... </p:tab> 
    </p:tabView> 

    <p:commandButton value="ok" oncomplete="checkAndHide(xhr, status, args);" action="#{bean.action()}"/> 
    </h:form> 

</p:dialog> 

Если я нажимаю «ОК», и я использую OmniFaces v 1.5 или 1.6 он функционирует правильно.. Если я использую 1.6.1, все обязательные поля (и p: selectOneMenu без нулевого выбранного элемента) отмечены красным цветом с ошибками «Значение требуется». Как я могу использовать 1.6.1 без ошибок проверки?

Редактировать: Я попытался создать пример, но я обнаружил еще один любопытное поведение приложения. С OmniFaces 1.6 он работает правильно, но с 1.6.1 поля ввода не заполняются значениями.

OmnitestBean.java 
import java.io.Serializable; 

import javax.annotation.PostConstruct; 
import javax.enterprise.context.SessionScoped; 
import javax.inject.Named; 

@Named 
@SessionScoped 
public class OmnitestBean implements Serializable{ 
private Integer value1 = 12; 
private Integer value2 = 3; 

public OmnitestBean(){ 
    System.out.println("Constru"); 
} 

@PostConstruct 
public void a(){ 
    value1 = 14; 
    value2 = 30; 
    System.out.println("in postconstruct"); 
} 

public Integer getValue1() { 
    return value1; 
} 

public void setValue1(Integer value1) { 
    this.value1 = value1; 
} 

public Integer getValue2() { 
    return value2; 
} 

public void setValue2(Integer value2) { 
    this.value2 = value2; 
} 

public void action(){ 
    System.out.println("In action"); 
} 

} 

omnifaces.xhtml:

<!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:fn="http://java.sun.com/jsp/jstl/functions" 
xmlns:pe="http://primefaces.org/ui/extensions"> 
<h:head /> 
<body> 
<h:form id="editPopForm"> 
    <p:messages id="messages2" autoUpdate="true"></p:messages> 
    <p:inputText value="#{omnitestBean.value1}" required="true" /> 
    <p:inputText value="#{omnitestBean.value2}" /> 

    <p:commandButton process="@form" action="#{omnitestBean.action()}" value="OK" 
     update="@form" id="editFormOkButt" /> 
</h:form> 

+0

Это странно. Посмотрите на это. Кстати, разве это не должно быть ''? Пожалуйста, отправьте код таким образом, чтобы я мог копировать его без изменений в ''. С или без 'checkAndHide'. – BalusC

+0

Извините, не могу воспроизвести его. Пожалуйста, опубликуйте настоящий SSCCE (то есть код, который я (и вы!) Может просто копировать'n'paste'n'run в пустой игровой среде WAR, не делая неочевидных модификаций/stubbing). – BalusC

+0

Спасибо, я постараюсь. К сожалению, я не могу отправить свой код в оригинальной форме. – Tony

ответ

1

Как отметил BalusC в своем комментарии он имеет что-то делать с Integer конвертер. У меня был следующий цифровой конвертер, который был скрыт где-то в проекте.

@FacesConverter(value = "someDummyConverter") 
public class SomeDummyConverter extends IntegerConverter { 
public Object getAsObject(FacesContext context, UIComponent component, 
     String value) { 
    Integer intValue = (Integer) super.getAsObject(context, component, value); 
    return intValue; 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object o) { 
    return null; 
} 

}

Если бы я использовал OmniFaces 1.5 или 1.6 этот преобразователь не был вызван. С OmniFaces 1.6.1, 1.6.2, 1.6.3 был вызван преобразователь. Если я удалил конвертер, проблема исчезла.

Смежные вопросы