I don't see anything wrong with what you've written there (I would add 
type="file" to your <input> tag so that it looks right if you view it offline 
in a browser, but that shouldn't affect how Clay treats it).  Does it let you 
select a file before submitting?  

Double-check to make sure that you don't have any mistakes in your 
configuration (especially in web.xml).  Check the log for errors as well (you 
may need to tweak the log settings to get useful information).  I've used 
t:inputFileUpload with Clay many times, so I'm sure it works.

By the way, it generally isn't necessary to copy the component definitions into 
your clay-config.xml file.  Just add 
classpath*:META-INF/tomahawk-1_1_3-config.xml to the 
org.apache.shale.clay.COMMON_CONFIG_FILES context parameter in your web.xml 
file, and you'll get the definitions of all the Tomahawk components.



Rich Eggert
Member of Technical Staff
Proteus Technologies, LLC
http://www.proteus-technologies.com



-----Original Message-----
From: Zheng, Xiahong [mailto:[EMAIL PROTECTED]
Sent: Fri 4/11/2008 12:19 PM
To: user@shale.apache.org
Subject: RE: [Shale Clay]
 
Thanks again. I have another question. How does shale work with
fileload? I am trying to use t:fileUpload from tomahawk. I copied the
component definition into my clay-config.xml

<component jsfid="t:inputFileUpload"
        componentType="org.apache.myfaces.HtmlInputFileUpload"
        extends="baseOutput>
        <attributes>
                <set name="id" bindingType="VB" />
                .....
      </attributes>
</component>

And I added the following in my html form

<form enctype="multipart/form-data">

<input jsfid="t:inputFileUpload" value="#{mybean.symbolsFile}"
storage="file" />

<input type="submit" action="#{mybean.getQuotes}" value="Get Quotes"/>

</form>

When I hit the submit button, action method is never invoked.
Interestingly, if I remove the "enctype" attribute, action method is
indeed invoked but the input is null which is expected. I have the
extension filter configured.

Any idea? 

 

-----Original Message-----
From: Richard Eggert [mailto:[EMAIL PROTECTED] 
Sent: Friday, April 11, 2008 7:33 AM
To: user@shale.apache.org
Subject: RE: [Shale Clay]

Yes.  Basically, you would have to define a component that inherits from
h:dataTable, and give it child elements that inherit from h:column.
Each of those child elements would then contain children that make up
the content of your columns.

Rich Eggert
Member of Technical Staff
Proteus Technologies, LLC
http://www.proteus-technologies.com



-----Original Message-----
From: Zheng, Xiahong [mailto:[EMAIL PROTECTED]
Sent: Fri 4/11/2008 12:08 AM
To: user@shale.apache.org
Subject: RE: [Shale Clay]
 
Thanks a lot Rich. I was able to use your first example without having
any white space issue even if I reformatted it a bit. If I want to use
the second solution, how would I define the behavior of the dataTable?
Would it still need to inherit dataTable for the looping capability
since the number of rows are dynamic?  

-----Original Message-----
From: Richard Eggert [mailto:[EMAIL PROTECTED] 
Sent: Thursday, April 10, 2008 5:12 PM
To: user@shale.apache.org
Subject: RE: [Shale Clay]

My experience with dataTables and clay has been that they don't get
along very well, at least in the case of HTML templates (XML templates
are another story).  This is mainly because h:dataTable has a
drastically different structure from HTML tables.  h:dataTable expects
to have h:columns as its immediate child (with optional tags for header
and footer rows nested within each column), whereas HTML TABLE tags
expect to have TR (row) tags as its children (or TR tags nested within a
TBODY), with the column (TD) tags nested within each row.  Essentially,
from the point of view of an h:dataTable, a column contains rows, but in
an HTML TABLE, a row contains columns, which makes mapping between the
two extremely difficult.  It can be done, but it involves making a lot
of dummy jsfid="void" tags and using SPAN tags to cause elements that
wouldn't be visible in the mockup to be rendered at runtime.

e.g.,

<table jsfid="h:dataTable" var="foo" value="#{bar.list}"
><tr jsfid="void" allowBody="false">
   <th>Mock Heading</th>
</tr><tr jsfid="void"
   ><td jsfid="h:column">
         #{foo.name}
         <span jsfid="h:outputText" value="Real Heading"
facetName="header"></span>
      </td>
   </tr>
</table>

Note that the lack of whitespace around the TR elements is intentional
to avoid (blank) text elements winding up as children of the h:dataTable
component (which is very nasty and breaks everything!).

As you can see, writing an HTML template for a dataTable gets extremely
ugly very quickly.  For this reason, I don't recommend doing it unless
you REALLY want to be able to view the mockup in a browser before
deploying it.  You're better off defining the template in XML and just
referring to it in the parent template, e.g.,

<table jsfid="my:customtable" allowBody="false">
   Table goes here.
</table>


What we really need is a new JSF component that provides the same
capabilities as dataTable but is structured more like HTML TABLE tags.



Rich Eggert
Member of Technical Staff
Proteus Technologies, LLC
http://www.proteus-technologies.com



-----Original Message-----
From: Zheng, Xiahong [mailto:[EMAIL PROTECTED]
Sent: Thu 4/10/2008 2:22 PM
To: user@shale.apache.org
Subject: FW: [Shale Clay]
 
I couldn't seem to understand by looking at the clay usecase example.
Can somebody post a simple example of using clay to generate a dynamic
data table, the equivalent of the JSF h:dataTable tag? 
 






Reply via email to