Page reload required for the backbean data fetched with rich
andrew_st Mar 2, 2009 1:31 PMIn my small application I want to fetch (using some external service) and output currency rates for a date selected with rich:calendar.
Courses are fetched by clicking the a4j:commandButton after the date has been selected.
This envokes backing beans properties to be updated.
But strangely enough updated bean properties are transferred to the rich:inplaceInput ONLY AFTER THE .jsp page has been reloaded
My code looks like this:
.jsp page
<rich:calendar id="myCalendar" value="#{calculator.selectedDate}">
<a4j:support event="onchanged" reRender="euroRate, usdRate" />
</rich:calendar>
<a4j:commandButton id="getCourseButton" value="Get Currency Rates" actionListener="#{calculator.fetchCourse}" reRender="euroRate, usdRate" />
<rich:inplaceInput id="euroRate" value="#{calculator.euroRate}" selectOnEdit="true" editEvent="onclick" layout="block" changedHoverClass="hover" viewHoverClass="hover" viewClass="inplace" changedClass="inplace" validator="#{calculator.checkFieldEuro}" showControls="true">
Calculator.java
private String euroRate;
private String usdRate;
private Date selectedDate;
…
/* this method addresses to some external service to read out the currency rates */
public void fetchCourse(ActionEvent event) {
Thread t = new Thread() {
public void run() {
CBRFCurrencyCourse cbrfCourse = new CBRFCurrencyCourse();
DateCurrencyCourse course = null;
//Date dateLocal = new Date(System.currentTimeMillis());
try {
course = cbrfCourse.getDateCurrencyCourse(getSelectedDate());
setEuroRate(Double.toString(course.getCurrency().get(Currency.EUR)));
setUsdRate(Double.toString(course.getCurrency().get(Currency.USD)));
System.out.println("Euro rate: " + getEuroRate());
System.out.println("USD rate: " + getUsdRate());
} catch (TravelCostException ex) {
String message = bundle.getString(ex.getResource());
} finally {
//progress bar dissappears
}
}
};
t.start();
}
Instead of inplaceInput components I have used also the following code snippet:
<h:inputText id="euroRate" value="#{calculator.euroRate}">
<a4j:support actionListener="#{calculator.checkFieldEuro}" event="onkeyup" />
</h:inputText>
And tried the following code for the calendar:
<rich:calendar value="#{calculator.selectedDate}" currentDateChangeListener="#{calculator.getCourse}">
<a4j:support event="onchanged" action="#{calculator.getCourse}"/>
</rich:calendar>
BUT NEITHER WAY I SEEM TO ABLE TO SEND BACKBEAN PROPERTIES’ VALUES to OUTPUT components in my jsp page.
Please advise,
I will be very grateful for you suggestions