2012-04-23 13 views
1

@ Baluscの以前の回答がHow to make a grid of JSF composite component?であるFaceletタグファイルを使用して、panelgrid内でjsf 1.2コンポーネントの再利用可能なグループを取得しようとしています。私は/WEB-INF/tags/input.xhtmlとexample.taglib.xmlとメインアプリケーションxhtmlをコピーしました。しかし、私はいくつかの問題にぶち当たっています。
1.私はIDを渡すと、単に私の主なXHTMLでPanelGrid内に複数のJSFコンポーネントがあります

<my:input id="cat" type="text" label="FirstName" bean="#{bean}" property="fName" required="true" /> 
<my:input id="dog" type="text" label="LastName" bean="#{bean}" property="lName" required="true /> 

を行うと、そのページを開いていない場合、私は、java.lang.IllegalArgumentExceptionが、例外トレースを取得しています:

java.lang.IllegalArgumentException 
at javax.faces.component.UIComponentBase.validateId(UIComponentBase.java:543) 
at javax.faces.component.UIComponentBase.setId(UIComponentBase.java:351) 
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:151) 
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47) 
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:119) 
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49) 
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25) 
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248) 
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294) 
at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:268) 
at com.sun.facelets.tag.UserTagHandler.apply(UserTagHandler.java:98) 
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47) 
at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314) 
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169) 
at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314) 
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169) 
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47) 
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49) 
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47) 
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25) 
at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95) 
at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524) 
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567) 
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
猫のエラー:

2.Toは、私は

<my:input id="cat" type="text" label="FirstName" bean="#{bean}" property="fName" required="true" /> 
<my:input id="dog" type="text" label="LastName" bean="#{bean}" property="lName" required="true /> 

私のタグにid値を渡すとき、私はコンポーネントj_id2の重複IDを取得し、これを乗り越えます。

java.lang.IllegalStateException: duplicate Id for a component j_id2:cat 
at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:68) 
at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92) 
at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92) 
at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92) 
at org.ajax4jsf.application.AjaxStateManager.getTreeStructureToSave(AjaxStateManager.java:187) 
at org.ajax4jsf.application.AjaxStateManager.buildViewState(AjaxStateManager.java:498) 
at org.ajax4jsf.application.AjaxStateManager.saveSerializedView(AjaxStateManager.java:451) 
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:615) 
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) 


3.Toはこれを過ぎて、私はすべてのCを削除されます:とき、ちょうどinput.xhtmlに「テキスト」の1つの入力タイプを保ち、今私がレンダリングされた2つのテキストボックスを参照してくださいが、私はビューを行う際にタグ・ファイル内のセットの定義は、私のTDビューの一部であることを:トン期待してC;ソース、私は2行を期待しますが、私はwasn instead.Also 3行を見ていた

<tr> 
    <td> 
    <c:set var="id" value="cat"></c:set> 
    <c:set var="required" value="true"></c:set> 
    </td> 
    <td><label for="j_id2:cat">First Name: &nbsp;*&nbsp;</label></td> 
    <td><input id="j_id2:cat" type="text" name="j_id2:cat" value="Smith" /></td> 
</tr> 
<tr> 
    <td></td> 
    <td> 
    <c:set var="id" value="dog"></c:set> 
    <c:set var="required" value="true"></c:set> 
    </td> 
    <td><label for="j_id2:dog">Last Name: &nbsp;*&nbsp;</label></td> 
</tr> 
<tr> 
    <td><input id="j_id2:dog" type="text" name="j_id2:dog" value="Joe" /></td> 
    <td></td> 
</tr> 

を参照してください。

何か指摘します。

答えて

0

はFaceletsの1.xのためには、以下のXML名前空間にJSTLのコアタグライブラリを宣言する必要があります:

xmlns:c="http://java.sun.com/jstl/core" 

Faceletsの1.xのためのURIには/jspありませんので、予めご了承ください

+0

それはそうです!あなたは救い主@Baluscです。 – phewataal

+0

あなたは大歓迎です。 – BalusC

+0

Ajaxがa4j:supportで動作する理由はわかりませんが、Tomahawkのdivをh:message() – phewataal