p: inputNumber не будет принимать значения менее 1 [дубликат]

Убедитесь, что все пути кода вызывает метод startForeground, например, код может генерировать исключение в методе onCreate вашего сервиса, который предотвращает вызов startForeground

   @Override
    public void onCreate() {
try{
}
catch(Exception e)
{
}
finally{
    startForeground(1, notificationbuilder.build());

}
    }
10
задан BalusC 5 August 2015 в 13:28
поделиться

9 ответов

Просто привяжите входное значение к свойству Double или лучше, BigDecimal вместо String.

private BigDecimal number; // Double can also, but beware floating-point-gui.de
<h:inputText value="#{bean.number}" />

JSF имеет встроенные преобразователи для тех типов, которые будут автоматически срабатывать. Вы можете настроить сообщение преобразователя, как показано ниже:

<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />
17
ответ дан BalusC 22 August 2018 в 22:03
поделиться

Вы можете использовать проверку JS

. Сначала вам необходимо определить функцию JS для проверки ввода

function validateInput(regexString) {
    var theEvent = window.event || event;
    var key = theEvent.keyCode || theEvent.which;
    if (key >= 46) {
        key = String.fromCharCode(key);
        var regex = new RegExp("^" + regexString + "$");
        if (!regex.test(key)) {
            theEvent.returnValue = false;
            if (theEvent.preventDefault) {
                theEvent.preventDefault();
            }
        }
    }
}

. Во-вторых, в вашем h: input, запишите onKeyPress событие и вызовите функцию

<h:inputText value="..." onKeyPress="validateInput('[0-9]*')/>

И она позволит вам вводить числа.

Вы можете легко расширить это использование в другом случае, когда вам нужно проверить whit other regex.

Обратите внимание, что это работает только с нажатием клавиши, если вы хотите захватить другое пользовательское событие, используйте соответствующий тег.

Cheers

1
ответ дан Arturo Volpe 22 August 2018 в 22:03
поделиться
  • 1
    Спасибо за ваш ответ. Но поскольку я написал, что у меня есть 30-40 входов со значениями до 12 цифр (6.6), поэтому вызов кода javascript в тысячу раз с помощью нажатия клавиши не будет хорошей идеей. Предлагайте любой другой метод. – abhi 14 October 2013 в 12:15
  • 2
    @abhi этот JS реагирует на ввод пользователя, пользователю невозможно ввести тысячу чисел одновременно. Пожалуйста, лучше объясните свою проблему. ура – Arturo Volpe 14 October 2013 в 16:39

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;"/> - это короткий путь, если вы хотите принимать только целые числа.

Преимущество над type="number" заключается в том, что вы даже не можете ввести нецифровое

13
ответ дан dasLort 22 August 2018 в 22:03
поделиться
  • 1
    dasLort: плюс один с моей стороны. Что я должен делать, чтобы разрешать только цифры и вводить ключ – Shirgill Farhan Ansari 12 May 2015 в 19:30
  • 2
    @ShirgillAnsari что-то вроде этого: onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;else if(event.which === 13) myFunction()", но я все же предпочитаю поместить все на разделенную функцию – Giovanne Afonso 18 May 2015 в 20:14
  • 3
    Отключение JavaScript не обойдет эту проверку? – Christophe Weis 25 August 2017 в 09:11
  • 4
    @ChristopheWeis это было бы, однако, как сказал BalusC [q] JSF имеет встроенные преобразователи для тех типов, которые будут автоматически запускаться. [/ Q] – Wep0n 9 November 2017 в 10:27

Если вы добавите это в свой xhtml

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

и используйте inputext для чисел Primefaces Расширения, называемые pe: inputNumber, которые не только подтверждают ваши числа, но и десятичные знаки также могут быть более полными.

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
6
ответ дан diego matos - keke 22 August 2018 в 22:03
поделиться

Это работает для меня

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"
2
ответ дан Manur 22 August 2018 в 22:03
поделиться

Попробуйте

<h:inputText>
   <f:validateRegex pattern="\d*(.\d+)?"/>
</h:inputText>
-1
ответ дан prageeth 22 August 2018 в 22:03
поделиться
  • 1
    Не удается заставить его работать с JSF 1. & lt; f: validateRegex & gt; Библиотека тегов поддерживает пространство имен: java.sun.com/jsf/core , но для имени не было определено ни одного тега: validateRegex – dantebarba 4 August 2017 в 19:08
  • 2
    У меня есть переменная float, и JSF выбрасывает эту ошибку: java.lang.ClassCastException - java.lang.Float нельзя передать в java.lang.String – ajaristi 19 January 2018 в 17:24

Вот несколько разных опций:

  • Вы можете использовать @Digits из проверки bean validation .
  • Вы можете использовать f : convertNumber .
  • Вы можете проверить ввод в методе поддержки (вы легко найдете для этого учебники)
  • Если jsf 2.2 и html5 являются опцией для вы можете использовать <input type="number" />
  • Или вы можете использовать свою собственную проверку Javascript.

Я думаю, что лучшие варианты либо с использованием проверки Bean, f: convertNumber или идет с HTML5, поскольку они являются самыми чистыми и дают вам наименее избыточный код.

2
ответ дан Simon 22 August 2018 в 22:03
поделиться
  • 1
    Спасибо за ваш ответ. но потому, что у меня есть почти 30-40 полей ввода, поэтому проверка бобов не будет хорошим методом. И затем я попробовал f: convertNumber с шаблоном / type / digitsOnly, но не выбрасывал ошибку. Итак, предлагаете ли вы любой другой простой способ проверить это. – abhi 14 October 2013 в 12:11
  • 2
    f: convertNumber будет принимать входные данные, начинающиеся с цифр, и попытайтесь угадать, какой номер он должен быть, так что 12f станет 12. Он не будет принимать ввод, начинающийся с символов, отличных от цифр. Почему проверка валидации не работает? Вам нужно было бы поместить только одну аннотацию для каждого поля в компоненте поддержки, соответствующем одному из ваших входов. Даже немного меньше кода, чем f: convertNumber. Также @Digits требует, чтобы вход был только числовым. – Simon 14 October 2013 в 16:12

Попробуйте

<h:inputText value="SomeValue" converter="javax.faces.Double" />
4
ответ дан Vasil Lukach 22 August 2018 в 22:03
поделиться
  • 1
    это неправильно, потому что ".123" выполните проверку (с точкой в ​​начале). Я думаю, вы должны использовать значение & lt; pe: inputNumber = & quot; # {beanTest.myValue} & quot; thousandSeparator = & Quot; & Quot; DecimalSeparator = & Quot;. & Quot; DecimalPlaces = & Quot; 0 & Quot; / & GT; ' – diego matos - keke 13 October 2015 в 19:32
  • 2
    @dmatos double a = .123; на 100% действителен в Java (для проверки он копирует эту строку в Java-коде). javax.faces.Double - стандартный JSF-конвертер, который охватывает Java double . – Vasil Lukach 14 October 2015 в 14:12

Решение html5, кросс-браузер и клиентская сторона может быть

<script>
  //<![CDATA[   
  $(document).ready(function(){
    $("#someinputid\\:withcolon").attr('type', 'number');
  });
  //]]>
</script>
  • . Для firefox это позволяет информационным пузырям советовать пользователю вводить действительные числа перед отправкой
  • Для IE он отправляет немедленно, очищает входной виджет, сбрасывается до нуля (если вход недействителен), не дает пользователю возможность исправлять на стороне клиента, но обеспечивает действительный запрос сервера
  • Для хром не тестировалось

вам нужно ссылаться на ресурс jquery, если он неявно доступен, например простые грани

-1
ответ дан woodz 22 August 2018 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: