проверить числовое значение в JSF

<ice:inputText id="txt-tlmanage-quantity"
                value="#{createToolsOrderBean.toolsOrderVO.quantity}" tabindex="7"
                onkeydown="moveFocus(event, 'txt-tlmanage-unitprice')"
                style="margin-left: 4px;margin-bottom: 4px;">
            </ice:inputText>

эта страница отправляется, когда я нажимаю кнопку, вызывая метод createSomething. Но этот метод не может вызываться, когда я ввожу строковое значение, так как quantity имеет тип Integer. Он выдает обратную сторону ошибки, но как узнать, что будет не так?

Я использую <ice:message> , но на странице будет длинное описание ошибки.

Error Meaasage : 

mainForm:txt-tlmanage-quantity: 'dsad' must be a number between -2147483648 and 2147483647 Example: 9346

Есть ли способ распечатать собственное сообщение об ошибке?


person chetan    schedule 23.02.2011    source источник
comment
Трудно понять ваш вопрос. Не могли бы вы внести ясность?   -  person Grzegorz Oledzki    schedule 23.02.2011
comment
я не совсем понимаю... вы хотите, чтобы inputText принимал только число, а затем работал с конвертером, вы хотите отобразить свое собственное сообщение, используя javadabbadoo.org/apendice/jsf/mensajesEstandar/index.html, но я не понимаю, что вам нужно?   -  person Necronet    schedule 24.02.2011


Ответы (4)


Вы должны добавить конвертер целых чисел в ваш ice:inputText. Это преобразует введенную строку в целое число.

<ice:inputText id="txt-tlmanage-quantity"
            value="#{createToolsOrderBean.toolsOrderVO.quantity}" tabindex="7"
            onkeydown="moveFocus(event, 'txt-tlmanage-unitprice')"
            style="margin-left: 4px;margin-bottom: 4px;">
    <f:converter converterId="javax.faces.Integer"/>
</ice:inputText>

У вас все равно будет сообщение об ошибке, если вы не введете целое число. Чтобы отобразить пользовательское сообщение вместо встроенного, необходимо создать пакет сообщений. Создайте файл свойств в одном из ваших пакетов и добавьте собственное сообщение об ошибке:

javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' must be a number between -2147483648 and 2147483647 Example: {1}

Добавьте этот файл свойств в качестве пакета ресурсов в faces-config.xml:

<faces-config> 
     <application>
         <message-bundle>my.package.mypropertiesfile</message-bundle>
     </application> 
</faces-config>
person Adam    schedule 23.02.2011

Сначала отредактируйте и вставьте ошибку, это поможет нам вам помочь.

Если вы хотите показать пользовательскую ошибку, используйте FacesMessage

Пример:

public void testingErrorMessages() {

   try {
      throw new Exception("");
   } catch(Exception exc) {
      FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, "Error message here!");
      FacesContext.getCurrentInstance().addMessage(null, facesMsg);
   }
}

Просто добавьте его и обновите файл <ice:message>. reRender для RichFaces и update для PrimeFaces, но я не знаю, как это работает в IceFaces..

person Renan    schedule 23.02.2011

Я думаю, ваша проблема в том, что он не говорит вам, что вы не можете использовать какие-либо буквы?

Вы исправите это, используя, например. преобразователь.

Просто добавьте следующий фрагмент в атрибуты inputText:

converter="javax.faces.Integer"

Когда вы собираетесь отправить сейчас, вы получите сообщение об ошибке на вашем . Если вы хотите создавать собственные сообщения об ошибках, используйте валидатор. Вы найдете хорошее руководство здесь.

person Patrick Trautmann    schedule 23.02.2011

Используйте атрибут конвертера в jsf для приема только числовых значений

Если вы хотите напечатать собственное сообщение об ошибке в jsf, вы можете использовать атрибут convertMessage.

<h:inputText id="textCreditCardNumberId" label="CreditCard Number"
converter="javax.faces.Integer" converterMessage="Please enter numeric only" 
maxlength="16" styleClass="controlfont" 
value="#{OnlineReservationBean.creditCardNumber}"></h:inputText>
person UdayKiran Pulipati    schedule 05.03.2013