проверить числовое значение в JSF - PullRequest
0 голосов
/ 23 февраля 2011
<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

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

Ответы [ 4 ]

1 голос
/ 23 февраля 2011

Вы должны добавить целочисленный конвертер в ваш 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>
0 голосов
/ 05 марта 2013

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

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

<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>
0 голосов
/ 23 февраля 2011

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

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

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

converter="javax.faces.Integer"

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

0 голосов
/ 23 февраля 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 ..

...