Используя ваш метод
Просто добавьте исключение для первого введенного символа. Вы можете сделать это, сделав что-то вроде этого;
<h:inputText value="#{downloadBackingBean.value}" onkeypress="if(($(this).val().length == 0 && even.which == 45) || ((event.which < 48 || event.which > 57) && event.which != 46 )) return false;">
<p:ajax event="change" process="@this"></p:ajax>
<f:convertNumber pattern="####0.00000" />
</h:inputText>
Как вы можете видеть, это просто добавляет дополнительную проверку - позволяет вам ввести знак минус, если это первый символ в поле ввода.
Если вы идете по этому маршруту, убедитесь, что вы проверяете значение, прежде чем оно заполнит ваш компонент поддержки.
Альтернативный метод на стороне сервера
Другой способ - сделать это на стороне сервера. Вы можете передать значение до базового компонента с помощью valueChangeListener. Затем вы можете отрегулировать процесс и вернуться к проверке на стороне сервера, выполнив что-то вроде этого:
<h:form>
<h:inputText valueChangeListener="#{bean.onNewValue}" value="#{bean.value}">
<f:ajax event="keyup" render="@form" execute="@form"/>
</h:inputText>
</h:form>
ValueChangeListener вызывается до того, как установлено значение базового компонента. Это позволяет вам постоянно проверять поступающие значения и обрабатывать их соответствующим образом. Как удаление нежелательных персонажей.
Вы легко сможете комбинировать это с проверкой бина или проверкой JSF в зависимости от того, что поддерживает ваша среда.