You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Tomić Mirko <mi...@gmail.com> on 2007/06/19 13:06:49 UTC
Big problem - Form elements inside custom component
I made a component which have some logic inside its template. It gets a list of
components inside her and render title, (which it gets from properties file from
a key based on nested component's id) and actual component, inside a table. It
has a number of columns as parameter. I used it till now with static components,
like simple insert and some other component which I made.
Now I need it to support forms. My component should be inside form component,
and do its job like it did till now, but I need to put TextFiled, Checkbox and
some other form components. It is important that my component must be inside
Form component.
I tried without modification to just put TextField in my component, and I get
error: "Could not find a strategy instance for class $TextField_24". Then I
tried to change class of my component to extend AbstractFormComponent instead of
AbstractComponent, and added required methods, but then I figured out that
AbstractFormComponent doesn't use template.
Please help how to solve this issue. Any help is appreciated.
Thank you.
Mirko
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Big problem - Form elements inside custom component
Posted by Tomić Mirko <mi...@gmail.com>.
I'm sorry :(
I must say I'm thrilled you answered my question.
here is more details about my component:
Layout.jwc:
<component-specification allow-body="yes" allow-informal-parameters="no"
class="Layout">
<parameter name="columnCount" default-value="literal:2" />
<parameter name="pageMessages" required="no"
default-value="container.messages" />
<parameter name="labelNoWrap" default-value="literal:true" />
<parameter name="showBorder" required="false"
default-value="literal:false" />
<property name="currentIndex" />
<property name="currentComponent" />
<component id="bodyComponentsIterator" type="For">
<binding name="source" value="ognl:fieldComponents" />
<binding name="value" value="currentComponent" />
<binding name="index" value="currentIndex" />
<binding name="renderTag" value="literal:false" />
</component>
<component id="currentComponentDelegator" type="Delegator">
<binding name="delegate" value="currentComponent" />
</component>
<component id="title" type="Insert">
<binding name="value"
value="ognl:pageMessages.getMessage('layout.' + id + '.' +
currentComponent.id + '.label')" />
</component>
<component id="title2" copy-of="title" />
<component id="mainLayoutTable" type="Any">
<binding name="style" value="layoutTableStyle" />
</component>
</component-specification>
Layout.html:
<table jwcid="mainLayoutTable" cellspacing="0" cellpadding="0">
<span jwcid="@RowSpacer" />
<tr>
<span jwcid="bodyComponentsIterator">
<span jwcid="@If"
condition="ognl:((currentIndex % columnCount)==0)"
renderTag="false">
<span jwcid="@If" condition="ognl:(currentIndex != 0)"
renderTag="false">
<span jwcid="@Insert" value="literal:<tr>" raw="true"
renderTag="false" />
<tr>
<td class="padingrite10">
</td>
</tr>
<span jwcid="@Insert" value="literal:<tr>" raw="true"
renderTag="false" />
</span>
</span>
<span jwcid="@If" renderTag="false"
condition="ognl:(currentComponent.id.indexOf('$') != 0)">
<span jwcid="@If" renderTag="false"
condition="labelNoWrap">
<td valign="top" class="padingrite10"
style="white-space:nowrap;">
<b>
<span jwcid="title" />
</b>
</td>
</span>
<span jwcid="@Else" renderTag="false">
<td valign="top" class="padingrite10">
<b>
<span jwcid="title2" />
</b>
</td>
</span>
</span>
<span jwcid="@Else" renderTag="false">
<td valign="top" class="padingrite10">
</td>
</span>
<td valign="top" class="padingrite35">
<span jwcid="currentComponentDelegator" />
</td>
</span>
</tr>
<span jwcid="@RowSpacer" />
</table>
RowSpacer is just component which makes one blank row in a table.
Layout.java:
public abstract class Layout extends BaseComponent {
public IRender[] getFieldComponents() {
IRender[] components = getBody();
List<IRender> fieldComponents = new ArrayList<IRender>();
for (IRender component : components) {
if (component != null && !(component instanceof TextToken)) {
fieldComponents.add(component);
}
}
return (IRender[]) fieldComponents.toArray(new IRender[fieldComponents
.size()]);
}
public abstract String getShowBorder();
public String getLayoutTableStyle() {
if (getShowBorder().equals("false")) {
return "border: 0px;";
} else {
return "border: 1px solid #777777;";
}
}
}
This component takes all components inside her and creates a table
with Title, and actual component in columns(it have number of columns,
actually number of column pairs as parameter). It works great with Insert
component, but what I need is to have the same functionality for editing,
with FormField components. I need to use Form component outside my component,
and to have FormFiled and other Form coponents inside my Layout component.
When I insert my component and FormField inside it, I get following error:
Exception: Could not find a strategy instance for class $TextField_24.
java.lang.IllegalArgumentException
Stack Trace:
*
org.apache.hivemind.lib.util.StrategyRegistryImpl.searchForAdaptor
(StrategyRegistryImpl.java:176)
*
org.apache.hivemind.lib.util.StrategyRegistryImpl.getStrategy
(StrategyRegistryImpl.java:74)
*
org.apache.tapestry.util.io.DataSqueezerImpl.squeeze
(DataSqueezerImpl.java:125)
* $DataSqueezer_11344885bfd.squeeze
($DataSqueezer_11344885bfd.java)
* $DataSqueezer_11344885bfc.squeeze
($DataSqueezer_11344885bfc.java)
*
org.apache.tapestry.data.NullDataSqueezerFilter.squeeze
(NullDataSqueezerFilter.java:32)
* $DataSqueezer_11344885bfe.squeeze
($DataSqueezer_11344885bfe.java)
* $DataSqueezer_11344885aa8.squeeze
($DataSqueezer_11344885aa8.java)
* $DataSqueezer_11344885aa7.squeeze
($DataSqueezer_11344885aa7.java)
* org.apache.tapestry.components.ForBean.getStringRepFromValue
(ForBean.java:477)
*
org.apache.tapestry.components.ForBean$StoreSourceDataIterator.next
(ForBean.java:440)
* org.apache.tapestry.components.ForBean.renderComponent
(ForBean.java:157)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.Any.renderComponent
(Any.java:53)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.form.FormSupportImpl.render
(FormSupportImpl.java:515)
* org.apache.tapestry.form.Form.renderComponent
(Form.java:226)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:41)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.IfBean.renderComponent
(IfBean.java:96)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:41)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.Any.renderComponent
(Any.java:53)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:41)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:41)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.html.Body.renderComponent
(Body.java:38)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:523)
* org.apache.tapestry.html.Shell.renderComponent
(Shell.java:64)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:174)
* org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:710)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.render
(DefaultResponseBuilder.java:172)
* org.apache.tapestry.AbstractPage.renderPage
(AbstractPage.java:246)
* org.apache.tapestry.engine.RequestCycle.renderPage
(RequestCycle.java:404)
*
org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse
(DefaultResponseBuilder.java:157)
*
org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse
(ResponseRendererImpl.java:33)
*
$ResponseRenderer_11344885ac8.renderResponse
($ResponseRenderer_11344885ac8.java)
*
$ResponseRenderer_11344885ac7.renderResponse
($ResponseRenderer_11344885ac7.java)
* org.apache.tapestry.engine.PageService.service
(PageService.java:68)
* $IEngineService_11344885b33.service
($IEngineService_11344885b33.java)
*
org.apache.tapestry.services.impl.EngineServiceInnerProxy.service
(EngineServiceInnerProxy.java:77)
*
org.apache.tapestry.services.impl.EngineServiceOuterProxy.service
(EngineServiceOuterProxy.java:72)
* org.apache.tapestry.engine.AbstractEngine.service
(AbstractEngine.java:246)
*
org.apache.tapestry.services.impl.InvokeEngineTerminator.service
(InvokeEngineTerminator.java:54)
* $WebRequestServicer_11344885b12.service
($WebRequestServicer_11344885b12.java)
* $WebRequestServicer_11344885b11.service
($WebRequestServicer_11344885b11.java)
* $WebRequestServicer_11344885b0e.service
($WebRequestServicer_11344885b0e.java)
* $WebRequestServicer_11344885b0d.service
($WebRequestServicer_11344885b0d.java)
*
org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service
(WebRequestServicerPipelineBridge.java:61)
*
$ServletRequestServicer_11344885af4.service
($ServletRequestServicer_11344885af4.java)
*
$ServletRequestServicer_11344885af3.service
($ServletRequestServicer_11344885af3.java)
*
org.apache.tapestry.request.DecodedRequestInjector.service
(DecodedRequestInjector.java:55)
*
$ServletRequestServicerFilter_11344885af0.service
($ServletRequestServicerFilter_11344885af0.java)
*
$ServletRequestServicerFilter_11344885aef.service
($ServletRequestServicerFilter_11344885aef.java)
*
$ServletRequestServicer_11344885af5.service
($ServletRequestServicer_11344885af5.java)
*
org.apache.tapestry.multipart.MultipartDecoderFilter.service
(MultipartDecoderFilter.java:52)
*
$ServletRequestServicerFilter_11344885aee.service
($ServletRequestServicerFilter_11344885aee.java)
*
$ServletRequestServicerFilter_11344885aed.service
($ServletRequestServicerFilter_11344885aed.java)
*
$ServletRequestServicer_11344885af5.service
($ServletRequestServicer_11344885af5.java)
*
org.apache.tapestry.services.impl.SetupRequestEncoding.service
(SetupRequestEncoding.java:53)
*
$ServletRequestServicerFilter_11344885af2.service
($ServletRequestServicerFilter_11344885af2.java)
*
$ServletRequestServicerFilter_11344885af1.service
($ServletRequestServicerFilter_11344885af1.java)
*
$ServletRequestServicer_11344885af5.service
($ServletRequestServicer_11344885af5.java)
*
$ServletRequestServicer_11344885ae8.service
($ServletRequestServicer_11344885ae8.java)
*
$ServletRequestServicer_11344885ae7.service
($ServletRequestServicer_11344885ae7.java)
* org.apache.tapestry.ApplicationServlet.doService
(ApplicationServlet.java:123)
* org.apache.tapestry.ApplicationServlet.doGet
(ApplicationServlet.java:104)
* javax.servlet.http.HttpServlet.service
(HttpServlet.java:740)
* javax.servlet.http.HttpServlet.service
(HttpServlet.java:853)
* org.mortbay.jetty.servlet.ServletHolder.handle
(ServletHolder.java:358)
*
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch
(WebApplicationHandler.java:294)
* org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:567)
* org.mortbay.http.HttpContext.handle
(HttpContext.java:1807)
*
org.mortbay.jetty.servlet.WebApplicationContext.handle
(WebApplicationContext.java:526)
* org.mortbay.http.HttpContext.handle
(HttpContext.java:1757)
* org.mortbay.http.HttpServer.service
(HttpServer.java:879)
* org.mortbay.http.HttpConnection.service
(HttpConnection.java:789)
* org.mortbay.http.HttpConnection.handleNext
(HttpConnection.java:960)
* org.mortbay.http.HttpConnection.handle
(HttpConnection.java:806)
* org.mortbay.http.SocketListener.handleConnection
(SocketListener.java:218)
* org.mortbay.util.ThreadedServer.handle
(ThreadedServer.java:331)
* org.mortbay.util.ThreadPool$PoolThread.run
(ThreadPool.java:520)
Like it doesn't see Form component?
I need to have structure like this:
<span jwcid=@Form>
<span jwcid=@Layout>
<span jwcid=@TextField />
</span>
</span>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Big problem - Form elements inside custom component
Posted by Howard Lewis Ship <hl...@gmail.com>.
http://www.catb.org/~esr/faqs/smart-questions.html
I'm also perplexed that people with questions don't take even a moment
to try and see their problem from an outsider's perspective, given
that an outsider is needed to help them. This is a reasonable
description of what they're trying to do, but they've omitted all the
useful details, including the stack trace that would help identify
what is failing. Including templates and code would help.
When you don't include sufficient information initially, you are
flagging your question as being a pain in the ass to answer, as the
expert is going to have to plead for information. It's one thing if
you are paying for support, but in the open source world you are
asking us to take time away from what we love (coding) to do something
we merely feel responsible for (support). Don't make it hard on us.
On 6/19/07, Tomić Mirko <mi...@gmail.com> wrote:
> I forgot to mention, it is written in Tapestry 4.1.
>
>
> Mirko
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind
Professional Tapestry training, mentoring, support
and project work. http://howardlewisship.com
Re: Big problem - Form elements inside custom component
Posted by Tomić Mirko <mi...@gmail.com>.
I forgot to mention, it is written in Tapestry 4.1.
Mirko
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org