Hi,

I have to use Trinidad components, and minimalize the use of manual HTML or js codes. I do not like to use trh: components, but the tr:table appearance has not been being suitable and I did not want to write own component because I thought the tr:table and iterate will do the work and I never wrote an own component before yet, so this was left. Although, as I see the own component could be the best solution to reach the proper appearance. But one question is still here: How to send parameters with tr:commandButton to SWF correctly and easy? Thank you for your patience.

On 2009.11.18. 8:54, Bart Kummel wrote:
Hi,

I'm afraid I still don't understand exactly what you need. However, I still
think you shouldn't use the approach with the<trh:tableLayout>, etc.
(Should you need *some* HTML for layout of your page, with Facelets you can
use HTML in your Facelet, so you don't need any<trh:...>  tag for that
anymore.)

If you want to use JSF, you should use JSF components that do the hard work
for you. You can search the Trinidad, Tomahawk and Tobago libraries or other
component libraries for a component that suits your needs. If nothing can be
found, you can create your own JSF component. If you prefer to be super
flexible in the HTML output, you should perhaps consider a framework that
isn't component based, like JSF.

Best regards,
Bart

On Tue, Nov 17, 2009 at 20:28, Arnold Preg<ap...@mailbox.hu>  wrote:

On 2009.11.17. 13:50, Bart Kummel wrote:

Hi,

I don't have any experience with Spring WebFlow, so I can't help you on
that
part. But when it comes to your other question, as I understand you right,
you want to spread your list of books over multiple pages if the number of
books exceeds a certain value, right?

This is simple to achieve, but you shouldn't use<trh:tableLayout>. You
should use<tr:table>   instead.<tr:table>   will do all hard work for you,
including the pagination of your data. Please read the documentation of
<tr:table><
http://myfaces.apache.org/trinidad/trinidad-api/tagdoc/tr_table.html
first.

And regarding your<tr:subform>: you are right that you don't use it
properly. In this case, it can be left out, you don't need it here.

One last remark: as I look at your code, I get the impression that you
don't
get the idea of JavaServer Faces. The idea is to use components that
render
a user interface for you. Those components perform all the hard work for
you. Generally speaking, you shouldn't be fiddling with repetition in any
JSF page definition. In this example, if you use a<tr:table>, the only
thing you have to do is tell the table where the collection is that you
want
to show. The table component will do all the hard work, including the
repetition and pagination. I hope this helps. Good luck!

Best regards,
Bart Kummel

On Tue, Nov 17, 2009 at 10:01, Arnold Preg<ap...@mailbox.hu>   wrote:



Hi,

I'm newbie, so sorry for stupid questions. I'm trying to use Facelets
1.1.14. SWF 2.0.8. Spring 2.5.6. Apache Trinidad 1.2.12.  JBoss EL 2.0.1.
and Hibernate JPA imp. but I think it's not relevant now. My English not
too
good let the code snippets speak because of this rather.

borderLayout.xhtml

<tr:document xmlns:ui="http://java.sun.com/jsf/facelets";
    xmlns:h="http://java.sun.com/jsf/html";
    xmlns:f="http://java.sun.com/jsf/core";
    xmlns:trh="http://myfaces.apache.org/trinidad/html";
    xmlns:tr="http://myfaces.apache.org/trinidad"; title="#{pageTitle}">
<tr:form id="mainForm">
<tr:panelBorderLayout>
<f:facet name="top">
<ui:include src="searchbar.xhtml" />
</f:facet>
<ui:insert name="pageContent" />
</tr:panelBorderLayout>
</tr:form>
<ui:debug />
</tr:document>

page.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml";
    xmlns:h="http://java.sun.com/jsf/html";
    xmlns:f="http://java.sun.com/jsf/core";
    xmlns:ui="http://java.sun.com/jsf/facelets";
    xmlns:tr="http://myfaces.apache.org/trinidad";
    xmlns:trh="http://myfaces.apache.org/trinidad/html";
    xmlns:test="http://www.my.net/some/arbitrary/namespace";
    template="/WEB-INF/layouts/borderLayout.xhtml">

<ui:param name="pageTitle" value="Home" />
<ui:define name="pageContent">
<trh:tableLayout width="75%" borderWidth="0" cellSpacing="10"
halign="center">
<trh:rowLayout>
<ui:repeat var="book" value="#{bestsellers}" offset="0" size="3">
<!--<tr:iterator var="book" first="0" rows="4" value="#{bestsellers}">
  -->
<trh:cellFormat valign="bottom">
<tr:commandLink action="selectBook2SeeDetails"
                            text="#{book.title}">
<f:param name="selectedBookId" value="#{book.bookId}" />
</tr:commandLink>

<!-- Probably I don't use the subform properly -->
*<tr:subform>
<tr:commandButton text="Add to cart" action="add2Cart"/>
<input type="hidden" name="selectedBookId" value="#{book.bookId}" />
</tr:subform>*

</trh:cellFormat>
</ui:repeat>
<!--</tr:iterator>   -->
</trh:rowLayout>
</trh:tableLayout>
</ui:define>
</ui:composition>

flow.xml

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd";>

<persistence-context />
<var name="cart" class="bookstore.domain.Cart" />
<view-state id="home">
<on-render>
<evaluate expression="catalogService.getAllBooks()"
result="viewScope.bestsellers"></evaluate>
</on-render>
<transition on="selectBook2SeeDetails" to="reviewBookDetails">
<set name="flowScope.selectedBook"

  value="catalogService.getBookById(requestParameters.selectedBookId)" />
</transition>
</view-state>

<global-transitions>
<transition on="add2Cart">
<evaluate
<!-- Maybe it would be better to use the bestsellers list of Book
entities
but then I guess the place of code that should iterate over the list to
find
the Book with the appropriate id would be good in a custom Action "bean"
(correct me if I'm wrong) and I don't want to complicate this sample with
that too.


  
expression="cart.addItem(catalogService.getBookById(requestParameters.selectedBookId))">
</evaluate>
</transition>
</global-transitions>
</flow>

When I click on the "Add to cart" button the post request will be
something
like this:

_noJavaScript    false
j_id5
j_id17:rangeStart    0
javax.faces.ViewState    H4sIAAAAAAAAA......
org.apache.myfaces.trinidad.faces.FORM    mainForm
*selectedBookId    1
selectedBookId    2
selectedBookId    3
selectedBookId    4 *
source    j_id31:0:j_id37:j_id38
state
value

As it seems it's send a "String array" of selectedBookId . I'd like to
send
just the appropriate id of course. How could I reach that? On top of this
I'd like to make more rows dynamically. You know 4 books in the first row
than another 4 one etc, but I don't know how to write the repeat code to
make this. Although, the main problem is the first one.






Thank you for your reply. I'm afraid you have misunderstood me. I'd like to
create something you can see on amazon. There are book's pictures 3 in a
row, you can click on them to see details. I'd like to make a category panel
and cart  panel you can see on that portal, but it's maybe an other topic.
If I can reach that look easily with tr:table I'll use that for this, but I
think the problem will come out again in an other scenario. Namely how to
send parameters with tr:commandButton. I think a hidden input filed would be
great for this, but in a separate form or something. Of course with an
action listener in a backing bean all of my problems would fly away, but
what is the purpose of SWF than?

Reply via email to