Наш проект использует PrimeFaces 5.1. Мне нужно ограничить тип пользователя для типа номера. Например, пользователь может вводить код типа 123.12 (с двумя цифрами после десятичной точки). Я попытался использовать <p:inputMask>
, но проблема в маске, которую она определяет, является фиксированной длиной. Пользователь должен ввести точно длину, определенную в атрибуте mask
<p:inputMask>
. Каким будет правильный способ в PrimeFaces, можно определить, сколько цифр после десятичной точки, а также может управлять длиной?Ограничить ввод номера на две фиксированные цифры после десятичной точки
Update:
Я попытался создать простую страницу с компонентом inputNumber. Но каким-то образом значение, введенное в inputNumber, будет считаться нулевым, поскольку оно не может передать требуемую проверку на уровне страницы.
Ниже приведено 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()));
}
}
Вы можете посмотреть [pe: inputNumber] (http://www.primefaces.org/showcase-ext/sections/inputNumber/basicUsage.jsf;jsessionid=10qlui67csru11u3u90x72gv0b) из PrimeFaces Extension. Это хорошо работает для меня. – ForguesR
@ForguesR Я попытался использовать inputNumber, но как-то не работал. Величина всегда равна нулю – Kuku
Извините, но я не могу найти что-то неправильно в том, что вы опубликовали. – ForguesR