2015-06-29 3 views
0

Наш проект использует PrimeFaces 5.1. Мне нужно ограничить тип пользователя для типа номера. Например, пользователь может вводить код типа 123.12 (с двумя цифрами после десятичной точки). Я попытался использовать <p:inputMask>, но проблема в маске, которую она определяет, является фиксированной длиной. Пользователь должен ввести точно длину, определенную в атрибуте mask<p:inputMask>. Каким будет правильный способ в PrimeFaces, можно определить, сколько цифр после десятичной точки, а также может управлять длиной?Ограничить ввод номера на две фиксированные цифры после десятичной точки

Update:

Я попытался создать простую страницу с компонентом inputNumber. Но каким-то образом значение, введенное в inputNumber, будет считаться нулевым, поскольку оно не может передать требуемую проверку на уровне страницы. enter image description here

Ниже приведено xhtml.

<?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:p="http://primefaces.org/ui" 
     xmlns:pe="http://primefaces.org/ui/extensions"> 

    <h:head> 
     <title>InputNumberTestingPage</title> 
    </h:head> 

    <h:body> 
     <h:form id="form"> 
      <p:panel id="panel" header="Form" style="margin-bottom:10px;"> 
       <p:messages id="messages" /> 
       <h:panelGrid columns="3" cellpadding="5"> 
        <p:outputLabel for="Name" value="Name: " /> 
        <p:inputText id="Name" value="#{inputNumberTesting.name}" required="true" label="Name"> 
         <f:validateLength minimum="2" /> 
        </p:inputText> 
        <p:message for="Name" /> 

        <p:outputLabel for="Salary" value="Salary:" /> 
        <pe:inputNumber id="Salary" value="#{inputNumberTesting.salary}" 
            required="true" label="Salary" decimalPlaces="2" maxValue="9999"/> 
        <p:message for="Salary" /> 
       </h:panelGrid> 
      </p:panel> 
      <p:commandButton value="Submit" update="panel" actionListener="#{inputNumberTesting.save}" style="margin-right:20px;" /> 
     </h:form> 
    </h:body> 

</html> 

Резервное Bean.

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

@ManagedBean(name = "inputNumberTesting") 
@ViewScoped 
public class InputNumberTesting { 
    private Object name; 

    private Object salary; 

    public Object getName() { 
     return name; 
    } 

    public void setName(Object name) { 
     this.name = name; 
    } 

    public Object getSalary() { 
     return salary; 
    } 

    public void setSalary(Object salary) { 
     this.salary = salary; 
    } 

    public void save() { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Name: "+getName()+"Salary: "+getSalary())); 
    } 
} 
+0

Вы можете посмотреть [pe: inputNumber] (http://www.primefaces.org/showcase-ext/sections/inputNumber/basicUsage.jsf;jsessionid=10qlui67csru11u3u90x72gv0b) из PrimeFaces Extension. Это хорошо работает для меня. – ForguesR

+0

@ForguesR Я попытался использовать inputNumber, но как-то не работал. Величина всегда равна нулю – Kuku

+0

Извините, но я не могу найти что-то неправильно в том, что вы опубликовали. – ForguesR

ответ

0

Вы можете использовать компонент InputNumber в библиотеке расширений опций. Прежде всего, необходимо, чтобы добавить свою зависимость, то вы можете использовать расширения пространства имен и использование должно быть как

xmlns:pe="http://primefaces.org/ui/extensions" 


<pe:inputNumber id="Input1" value="#{inputNumberController.input1}"/> 

Вы можете настроить мин макс числа, знаков после запятой, символы валют и существует больше вариантов настройки в компоненте.

+0

Я обновил область вопросов. Не совсем уверен, что я сделал неправильно, потому что в этом компоненте не может быть выбрана никакая ценность. Есть идеи ? – Kuku

+0

Не знаете, что не так, но попробуйте установить атрибут process в commandButton как process = "@ this panel" и попытайтесь использовать Double/Float или BigDecimal в бэкэнде в качестве целевого значения. – Mustafa

+0

спасибо помощнику, после того, как я перейду в Double, он работает. Но интересно только принять Double not Object. – Kuku

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