JSF: - Проблема с DataType и прослушивателем действий

Я столкнулся с проблемой с компонентом dataType и ActionListener при добавлении двух конкретных компонентов...

Фрагмент кода JSF: -

<h:outputLabel value="#{msg.org_SubscriberGroupId_1} " styleClass="intro" escape="false"/>
<h:outputLabel value="&nbsp;:&nbsp;" escape="false"/>
<h:inputText value="#{SubscriberServiceProfile.closedSubscriberGroupId1}" id="txtClosdGrup1" styleClass="textBox" label="#{msg.org_SubscriberGroupId_1}" />                                                     

<h:outputLabel value="#{msg.org_expiryDate_1}" styleClass="intro" escape="false"/>
<h:outputLabel value="&nbsp;:&nbsp;" escape="false"/>
<rich:calendar id="expiryDate1" value="#{SubscriberServiceProfile.dtExpiryDate1}" styleClass="textBox" datePattern="dd-MMM-yyyy" required="false" label="#{msg.org_expiryDate_1}" />

Код повторяется 5 раз... с разными идентификаторами... и разными индексами...

Мой резервный код Bean: -

public class ServiceProfile
{

private String closedubscriberGroupId1="0";
private String closedSubscriberGroupId2="0";
private String closedSubscriberGroupId3="0";
private String closedSubscriberGroupId4="0";
private String closedSubscriberGroupId5="0";
private Date dtExpiryDate1;
private Date dtExpiryDate2;
private Date dtExpiryDate3;
private Date dtExpiryDate4;
private Date dtExpiryDate5;

//respective getters and setters

public void create(ActionListener act)
{
//action listener code
}

}

Проблема связана с типом данных ClosedSubscriberGroup или Expiry date. Пользователь вводит целочисленное значение в поле ввода ClosedSubscriberGroup Id.

Но проблема в том, что мой actionListener не запускается до тех пор, пока я не укажу значения во всех 5 текстовых полях CloseSubscriberGroupId. В JSF нет проверки. Тем не менее, это не позволяет мне отправить форму и вызвать actionListener.

В чем может быть возможная проблема..????..Это тип данных??? или любая другая проблема??... Пожалуйста, помогите мне....


person AngelsandDemons    schedule 10.09.2011    source источник
comment
Что именно вы хотите сделать? Вы хотите преобразовать текст, введенный в <h:inputText id="txtClosdGrup1" /> , в тип данных java Date ?? Или вы хотите вызывать метод bean всякий раз, когда есть событие onChange() на <h:inputText id="txtClosdGrup1" /> ??   -  person Ken Chan    schedule 11.09.2011
comment
Добавьте ‹h:messages/› на страницу и проверьте, не возникли ли какие-либо ошибки проверки (или просто просмотрите журнал сервера, там должна быть зарегистрирована ошибка проверки).   -  person Andrey    schedule 11.09.2011
comment
@ken chan Моя основная потребность заключается в том, чтобы в inputText пользователь ввел целочисленное значение... а для типа rich:date он выберет дату из календаря... Нет события onchange, и все значения передаются в резервную копию bean только при отправке формы... Нет промежуточного вызова Backing Bean....   -  person AngelsandDemons    schedule 12.09.2011
comment
@ Андрей, это то, что я оставил в качестве последнего варианта ... Но я думаю, что другого выхода из этой проблемы нет .... Будет c, добавляя сообщения ...   -  person AngelsandDemons    schedule 12.09.2011
comment
поможет ли размещение этих 10 записей (closedGroup и expirydate) внутри новой PanelGrid????   -  person AngelsandDemons    schedule 12.09.2011


Ответы (1)


Из вашего комментария кажется, что вы хотите установить значения, которые вы вводите в <h:inputText> и <rich:calendar>, для его резервных компонентов и немедленно вызывать метод компонента всякий раз, когда происходит событие onchange на <h:inputText> и <rich:calendar>

Вы можете использовать a4j:support :

<rich:calendar value="#{bean.date}" styleClass="textBox" datePattern="dd-MMM-yyyy" required="false">
    <a4j:support event="onchanged" action="#{bean.onChangeDate}" ajaxSingle="true"/>
</rich:calendar>

<h:inputText value="#{bean.aString}"  styleClass="textBox">
    <a4j:support event="onchange" action="#{bean.onChangeText}"  ajaxSingle="true" />
</h:inputText> 

Это означает, что всякий раз, когда события onchange происходят в <h:inputText> и <rich:calendar>, будет запущен Ajax-запрос для вызова метода, указанного в атрибуте action. Атрибут ajaxSingle здесь важен, так как он немедленно установит значения, которые вы ввели в элементы управления, в свой вспомогательный компонент до того, как будет вызван action.

Обратите внимание, что для rich:calendar событием onchange является onchanged вместо onchange.

Ссылка:

person Ken Chan    schedule 12.09.2011
comment
Спасибо за ответ. Однако я помещу введенные значения в резервный компонент только при отправке формы, а не при вызове ajax... Перед отправкой формы нет промежуточных вызовов ajax... Итак, после ввода всех значений пользователь щелкнет на ‹h:commandButton› и будет вызван actionListener. Внутри этого actionListener я получаю значения этих полей с помощью геттеров. Однако из-за указанной проблемы сам мой ActionListener не вызывается до тех пор, пока не будут введены все значения полей. В моем JSF нет проверки. - person AngelsandDemons; 12.09.2011
comment
@ankit Если действие <h:commandButton> не может быть вызвано, если некоторые поля пусты, это означает, что у вас есть некоторые ошибки проверки, которые не позволяют вам отправить форму в таких случаях. Добавьте <h:messages/>, чтобы узнать, возникли ли какие-либо ошибки проверки. - person Ken Chan; 13.09.2011