JSF h: проверка inputText и f: ajax render

Очень простое приложение JSF:

  • Элемент InputText назначается с помощью Validator.
  • f: ajax используется для визуализации следующего элемента (phoneNumber) с помощью события blur .
  • PhoneNumber будет отображаться только в том случае, если inputText передаст валидатор, а логическое значение isValid установлено в true

Вот фрагмент кода

<h:form id="invOrdersWizForm">                                  
    <h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow"
        validator="#{person.validatePerson}"                                
        value="#{person.name}">
        <f:ajax render="phoneLabel" event="blur"/>                                                              
    </h:inputText>  
    <h:outputText id="phoneLabel"
        rendered="#{person.isValid}"                        
        styleClass="ordLabelWide" value="#{person.phoneNumber}" />
</h:form>

ManagedBean

public void validatePerson(FacesContext context, UIComponent toValidate, Object value) {
    name = ((String) value).toUpperCase();
    phoneNumber = "12345678";
    isValid = true;
}

Проблема в том, что по какой-то причине phoneNumber не отображается вообще.

Единственный способ заставить его работать - это изменить f: ajax на отображение @form

<h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow"
    validator="#{person.validateSecurityCode}"                              
    value="#{person.name}">
    <f:ajax render="@form" event="blur"/>                                                               
</h:inputText>  

Или удалить отрисовку из phoneNumber

    rendered="#{person.isValid}"

По какой-то причине f: ajax с определенным идентификатором элемента и отрисовка на основе атрибута managedBean не может сосуществовать.

Есть идеи или советы, ребята?

ПРИМЕЧАНИЕ: uint32_t muldiv (uint32_t a, uint32_t b, uint32_t c) {uint64_t x = а; х = х * Ь; х = х / с; return x; ...

Рассмотрим следующее как эталонную реализацию:

/* calculates (a * b) / c */
uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c)
{
    uint64_t x = a;
    x = x * b;
    x = x / c;
    return x;
}

Меня интересует реализация (на C или псевдокоде), которая не требует 64-битного целочисленного типа.

Я начал рисовать эскиз реализация, которая выглядит следующим образом:

/* calculates (a * b) / c */
uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c)
{
    uint32_t d1, d2, d1d2;
    d1 = (1 << 10);
    d2 = (1 << 10);
    d1d2 = (1 << 20); /* d1 * d2 */
    return ((a / d1) * (b /d2)) / (c / d1d2);
}

Но трудность состоит в том, чтобы выбрать значения для d1 и d2, которые позволяют избежать переполнения ((a / d1) * (b / d2) <= UINT32_MAX) и минимизировать ошибку всего вычисления .

Есть какие-нибудь мысли?

5
задан Pedro Pedruzzi 10 November 2010 в 12:00
поделиться