advance page search result
bobgee Mar 18, 2009 5:34 PMHi!
I have altered a seam generated list page by replacing in the search panel an input field by an option list. It's a printer list where printers are linked @OneToMany to manufacturers.
My question is how to pass the manufacturer (id) to the next page in the result list page.
PrinterList.xhtml:
<rich:simpleTogglePanel label="#{messages.searchFilter}" switchType="ajax"> <s:decorate template="layout/display.xhtml"> <ui:define name="label">Manufacturer</ui:define> <h:selectOneMenu id="manufacturerid" value="#{examplePrinter.manufacturer}" required="false" onchange="submit()"> <s:selectItems value="#{manufacturers.resultList}" var="_manufacturer" label="#{_manufacturer.name}" noSelectionLabel="#{messages.UnassignedOption}" hideNoSelectionLabel="false"/> <s:convertEntity /> </h:selectOneMenu> </s:decorate> <s:decorate template="layout/display.xhtml"> <ui:define name="label">Modelname</ui:define> <h:inputText id="modelname" value="#{examplePrinter.modelname}"/> </s:decorate> </rich:simpleTogglePanel> <div class="actionButtons"> <input type="hidden" name="firstResult" value="0"/> <h:commandButton id="search" value="#{messages.searchSearch}" action="/PrinterList.xhtml"/> <s:button id="reset" value="#{messages.searchReset}" includePageParams="false"/> </div> ... <s:link view="/PrinterList.xhtml" rendered="#{printerList.nextExists}" id="nextPage"> <h:graphicImage value="#{messages.imgPageNext}"/> <f:param name="firstResult" value="#{listBean.nextFirstResult}"/> </s:link>
PrinterList.page.xml:
<param name="firstResult" value="#{printerList.firstResult}"/> <param name="sort" value="#{printerList.orderColumn}"/> <param name="dir" value="#{printerList.orderDirection}"/> <param name="from"/> <param name="manufacturername" value="#{exampleManufacturer.name}"/> <param name="modelname" value="#{examplePrinter.modelname}"/>
Missing here something like:
<param name="manufacturerid" value="#{examplePrinter.manufacturer}"/>
Here's the question!
The search works fine when I chose one manufacturer from the option list (onchange submit!).
The first result page is correct. The manufacturer in the option list is selected. But when I press the next button, the result list comes (surely) without considering the chosen manufacturer.
The question is how to specify the manufacturerid as a page paramater in .page.xml.
In PrinterList.xhtml manufacturerid is set to the manufacturer's id because of s:convertEntity, but how can I accomplish this in .page.xml???
There, examplePrinter.manufacturer results to the class id
(&manufacturerid=....Manufacturer@d38dc4&cid=89)
If I specify
<param name="manufacturerid" value="#{examplePrinter.manufacturer.id}"/>
I get the error Target Unreachable, 'manufacturer' returned null on 'x.x.x.entity.Printer'
But anyway it's not the right approach to get in the manufacturer's id.
components.xml:
<component name="examplePrinter" class="xxx.xxx.xxx.entity.Printer"/> <component name="exampleManufacturer" class="xxx.xxx.xxx.entity.Manufacturer"/> <framework:entity-query class="xxx.xxx.xxx.session.EntityQueryExtended" name="printerList" max-results="#{messages.resultsPerPage}" ejbql="select printer from Printer printer join printer.manufacturer manufacturer" order="printer.manufacturer.name, printer.generic desc, printer.modelname" > <framework:restrictions> <value>lower(printer.manufacturer.name) like concat('%', lower(#{exampleManufacturer.name}),'%')</value> <value>lower(printer.modelname) like concat('%', lower(#{examplePrinter.modelname}),'%')</value> <value>manufacturer = #{examplePrinter.manufacturer}</value> </framework:restrictions> </framework:entity-query>
More code needed?
Thank for your time!
Regards, Robert