java - JSF property transfer from backing bean A to backing bean B -
i'm getting deeper jsf 2.0 @ moment , lacking bit of understanding "transport" of managed bean properties 1 view other. searched bit haven't found example, if point me tutorial or explain things little bit i'd grateful.
so here scenario:
i'm developing small playground calendar application. first view select.xhtml
contains calendar selector, user can pick specific date:
<html> ... <h:form> <!-- calendar selector primefaces --> <p:calendar value="#{calendarselect.date}" mode="inline" navigator="true" /> <p:commandbutton value="show entries date" action="day" /> ...
my corresponding backing bean looks this:
@managedbean(name="calendarselect") @requestscoped public class calendarselectcomponent { private date date = null; ... // getters , setters
now when submit form select.xhtml
i'm forwarded day.xhtml
<html> ... <h:form> current day ist: <h:outputtext value="#{calendaredit.date}"> <f:convertdatetime pattern="dd.mm.yyyy" /> </h:outputtext>
the backing bean looks this:
@managedbean(name="calendaredit") @viewscoped public class calendareditcomponent implements serializable { private date date = null; private calendarentrybean currententry = null; private list<calendarentrybean> allentries = null; ....
i trying solve problem: how transfer date
parameter selector editor?
i've tried number of options, 1 this:
<p:commandbutton value="show entries date" action="day" /> <f:setpropertyactionlistener target="#{calendaredit.date}" value="#{calendarselect.date}" /> </p:commandbutton>
a debugger shows, indeed, date
property of calendaredit
populated value calendarselect
, since day.xhtml
new view, new calendareditcomponent
backing bean being created , not 1 i've populated date selector in select
view.
i've read 1 solution create sessionscoped
backing bean retain it's values. not way think it's supposed work, because don't need information in session, want "travel" b. downside session based approach can use 1 selector , 1 editor per session - think isn't acceptible if think of multi window browsing , on.
i don't think i'm first 1 encountering such scenario , i'm sure jsf provides elegant solution haven't been able find solution.
so once again, if knows how approach - i'm listening! ;-)
the <f:setpropertyactionlistener>
executed during invoke action phase of form submit. expects value still there @ point. since select bean request scoped, isn't there during form submit anymore. want instead pass request parameter inlined in output during render response. can <f:param>
.
<p:commandbutton value="show entries date" action="day" /> <f:param name="date" value="#{calendarselect.dateasstring}" /> </p:commandbutton>
it'll available request parameter (note understands strings, due nature of http). let jsf set request parameters managed properties, since edit bean view scoped, isn't possible @managedproperty
. you've got gather externalcontext
.
string dateasstring = externalcontext.getrequestparametermap().get("date");
true, that's clumsy. have used same bean , view , toggle visibility of select/edit forms rendered
attribute. edit view after not directly openable/bookmarkable simple get, isn't it? ;)
Comments
Post a Comment