An Error Occurred:

duplicate Id for a component Services

+ Stack Trace

java.lang.IllegalStateException: duplicate Id for a component Services
	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.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.AjaxStateManager.getTreeStructureToSave(AjaxStateManager.java:189)
	at org.ajax4jsf.application.AjaxStateManager.buildViewState(AjaxStateManager.java:514)
	at org.ajax4jsf.application.AjaxStateManager$SeamStateManagerWrapper.saveView(AjaxStateManager.java:106)
	at org.jboss.seam.jsf.SeamStateManager.saveView(SeamStateManager.java:89)
	at org.ajax4jsf.application.AjaxStateManager.saveSerializedView(AjaxStateManager.java:470)
	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:117)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
	at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
	at java.lang.Thread.run(Thread.java:679)

+ Component Tree

<AjaxViewRoot id="_viewRoot" immediate="false" inView="true" locale="en" renderKitId="HTML_BASIC" renderRegionOnly="false" rendered="true" selfRendered="false" submitted="false" transient="false" viewId="/richfaces-jboss-inplace-input/inplace-input-textarea.xhtml">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Chiral Software, Inc. GSA IT70 Java, Android, security software developers in Los Angeles</title> <link rel="shortcut icon" href="#{request.contextPath}/favicon.ico"/>
<HtmlLoadStyle id="j_id4" inView="true" rendered="true" src="/stylesheet/theme.xcss" transient="false"/>
<HtmlLoadStyle id="j_id5" inView="true" rendered="true" src="/stylesheet/theme.css" transient="false"/>
<HtmlLoadStyle id="j_id6" inView="true" rendered="true" src="/stylesheet/theme.css" transient="false"/>
<HtmlLoadStyle id="j_id7" inView="true" rendered="true" src="/stylesheet/universal.css" transient="false"/>
<HtmlLoadStyle id="j_id8" inView="true" rendered="true" src="/stylesheet/richstyles.css" transient="false"/>
</head> <body> <div class="nav-div">
<HtmlToolBar id="j_id10" inView="true" itemSeparator="none" rendered="true" style="vertical-align:middle;" transient="false" width="100%">
<HtmlLink action=" disabled="false" id="j_id11" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" style="color:black;font-size:4.2mm;" styleClass="menu-link" transient="false" value="Chiral Software, Inc." view="/index.xhtml"/>
<HtmlOutputText escape="true" id="j_id12" inView="true" rendered="true" transient="false" value=" "/>
<HtmlOutputText escape="true" id="j_id13" inView="true" rendered="true" style="color:black;font-size:4mm;white-space:nowrap;" transient="false" value="310-356-7869"/>
<HtmlToolBarGroup id="j_id14" inView="true" itemSeparator="none" location="right" rendered="true" style="white-space:no-wrap;" transient="false">
<form xmlns="http://www.w3.org/1999/xhtml" style="white-space:nowrap;" action="/search-results.seam" method="get"> <input disabled="disabled" type="text" name="queryString" style="margin:0px;background-color:#fff06c" value="#{searchAction.queryString}"/> <input disabled="disabled" type="submit" style="font-size:2.7mm;margin:0px;" value="Search"/> </form>
</HtmlToolBarGroup>
</HtmlToolBar>
<HtmlToolBar id="j_id16" inView="true" itemSeparator="none" rendered="true" styleClass="navbar" transient="false" width="100%">
<HtmlToolBarGroup id="j_id17" inView="true" itemSeparator="none" location="left" rendered="true" transient="false">
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="0" horizontalOffset="0" id="j_id18" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="250" submitMode="none" transient="false" verticalOffset="0">
label
Services
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id20" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="Services" immediate="false" inView="true" includePageParams="false" propagation="none" rendered="true" transient="false" value="Service description" view="/services.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id21" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="Services" immediate="false" inView="true" includePageParams="false" propagation="none" rendered="true" transient="false" value="GSA Services" view="/gsa-it70-price-list.xhtml"/>
</HtmlMenuItem>
</HtmlDropDownMenu>
<HtmlDiv id="j_id22" inView="true" rendered="true" style="padding:0px 5px 2px 5px;" transient="false">
<HtmlLink action=" disabled="false" id="j_id23" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" styleClass="menu-link" transient="false" value="Company" view="/company.xhtml"/>
</HtmlDiv>
<HtmlDiv id="j_id24" inView="true" rendered="true" style="padding:0px 5px 2px 5px;" transient="false">
<HtmlLink action=" disabled="false" id="j_id25" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" styleClass="menu-link" transient="false" value="Downloads" view="/downloads.xhtml"/>
</HtmlDiv>
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="800" horizontalOffset="0" id="j_id26" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="50" submitMode="none" transient="false" value="Articles" verticalOffset="0">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id27" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id28" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Programming for Google Android" view="/google-android-introduction/android.xhtml"/>
</HtmlMenuItem>
<HtmlMenuGroup disabled="false" event="onmouseover" id="j_id29" inView="true" rendered="true" showDelay="300" transient="false" value="VoIP with Asterisk">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id30" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id31" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Configuring Asterisk VoIP PBX over OpenVPN, Part 1: the basics" view="/asterisk-article/voip-sip-asterisk-configuration-part-1.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id32" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id33" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Configuring Asterisk VoIP PBX over OpenVPN, Part 2: extensions" view="/asterisk-article/voip-sip-asterisk-configuration-part-2.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id34" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id35" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Configuring Asterisk VoIP PBX over OpenVPN, Part 3: client configuration checklist" view="/asterisk-article/openvpn-client-setup.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id36" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id37" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Configuring Asterisk VoIP PBX over OpenVPN, Part 4: Linux Softphone reviews" view="/asterisk-article/linux-softphone-comparison.xhtml"/>
</HtmlMenuItem>
</HtmlMenuGroup>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id38" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id39" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="JBoss Seam and Googlebot" view="/launching-a-jboss-seam-site/jboss-seam-problems.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id40" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id41" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="RichFaces 3.2: Inplace input and select" view="/richfaces-jboss-inplace-input/inplace-input-textarea.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id42" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id43" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Hibernate Full Text Search within JBoss Seam" view="/hibernate-full-text-search-with-seam/jboss-search.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id44" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id45" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Expert systems for access control: Seam security with JBoss Rules" view="/seam-security-rules/jboss-rules.xhtml"/>
</HtmlMenuItem>
<HtmlMenuGroup disabled="false" event="onmouseover" id="j_id46" inView="true" rendered="true" showDelay="300" transient="false" value="Linux and JBoss">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id47" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id48" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Using iptables to run JBoss as non-root" view="/linux-system-administration/ubuntu-firewall-iptables.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id49" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id50" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Deploying JBoss Aplication Server on Ubuntu" view="/linux-system-administration/jboss-server-deployment.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id51" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id52" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Using VirtualBox to test server configurations" view="/linux-system-administration/virtualbox-server-testing.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id53" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id54" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Configuring Postfix, SpamAssassin, Amavisd-new, and Razor in Ubuntu" view="/linux-system-administration/ubuntu-postfix-imap-dovecot-setup.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id55" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id56" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Secure mail relaying with Postfix and Dovecot SASL" view="/linux-system-administration/secure-relaying-postfix-sasl-tls-dovecot.xhtml"/>
</HtmlMenuItem>
</HtmlMenuGroup>
</HtmlDropDownMenu>
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="800" horizontalOffset="0" id="j_id57" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="50" submitMode="none" transient="false" value="Blog" verticalOffset="0">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id58" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="false" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id59" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Create blog entry" view="/blog-entry-edit.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id60" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id61" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id62" inView="true" name="str" rendered="true" transient="false" value="UnsupportedOperationException-setProperty-must-be-overridden-by-2d62921791a5df00"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id63" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id64" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="InstantiationException: Could not instantiate Seam component" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id65" inView="true" name="str" rendered="true" transient="false" value="InstantiationException-Could-not-instantiate-Seam-component-f621c0533182585e"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id66" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id67" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Google Android first look" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id68" inView="true" name="str" rendered="true" transient="false" value="Google-Android-first-look-46567a48554f5318"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id69" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id70" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="DTD declarations in XML files are evil" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id71" inView="true" name="str" rendered="true" transient="false" value="DTD-declarations-in-XML-files-are-d69ec4c5afaa0922"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id72" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id73" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="What I'd like to see in Java Persistence" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id74" inView="true" name="str" rendered="true" transient="false" value="What-I-d-like-to-see-65eff5e570e51650"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id75" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id76" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Annotations, inheritance, EJBs and JBoss Seam" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id77" inView="true" name="str" rendered="true" transient="false" value="Annotations-inheritance-EJBs-and-JBoss-Seam-aeb5d89dd0fdbe82"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id78" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id79" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Finding the right JAR" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id80" inView="true" name="str" rendered="true" transient="false" value="Finding-the-right-JAR-b29918d6a5eaaf8f"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id81" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id82" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="No route to host while parsing XML?" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id83" inView="true" name="str" rendered="true" transient="false" value="No-route-to-host-while-parsing-b6b5f0cbb79e5cd8"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id84" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id85" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="JFreeCharts in PDF with JSF and Seam" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id86" inView="true" name="str" rendered="true" transient="false" value="JFreeCharts-in-PDF-with-JSF-and-c47ae72d938fe060"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id87" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id88" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="JBoss Seam iText PDF custom JSF tags" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id89" inView="true" name="str" rendered="true" transient="false" value="JBoss-Seam-iText-PDF-custom-JSF-4642a90cb4d7412d"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id90" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id91" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Securing Dovecot IMAP, VSFTPD with TLS" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id92" inView="true" name="str" rendered="true" transient="false" value="Securing-Dovecot-IMAP-VSFTPD-with-TLS-40e2c75c8a19e636"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id93" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id94" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Secure relaying with Postfix TLS" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id95" inView="true" name="str" rendered="true" transient="false" value="Secure-relaying-with-Postfix-TLS-a03e00a8fb8ac1d0"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id96" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id97" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="IllegalArgumentException: no such setter method: conversationIsLongRunningParameter" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id98" inView="true" name="str" rendered="true" transient="false" value="IllegalArgumentException-no-such-setter-method-conversationIsLongRunningParameter-f391bab57e867183"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id99" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id100" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="NetBeans 6 is cool" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id101" inView="true" name="str" rendered="true" transient="false" value="NetBeans-6-is-cool-4318914ee235035f"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id102" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id103" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Virtual hosts in JBoss" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id104" inView="true" name="str" rendered="true" transient="false" value="Virtual-hosts-in-JBoss-a8d9cad39474c390"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id105" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id106" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Bean binding Swing example" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id107" inView="true" name="str" rendered="true" transient="false" value="Bean-binding-Swing-example-597a56fe458d8892"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id108" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id109" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="JBoss Incomplete Deployment listing" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id110" inView="true" name="str" rendered="true" transient="false" value="JBoss-Incomplete-Deployment-listing-8022714d44d21700"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id111" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id112" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="SpamAssassin: it works" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id113" inView="true" name="str" rendered="true" transient="false" value="SpamAssassin-it-works-e76a18d20a4c85ef"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id114" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id115" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="ERROR: syntax error at or near TXID" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id116" inView="true" name="str" rendered="true" transient="false" value="ERROR-syntax-error-at-or-near-7f4b4f1201c176bb"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id117" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id118" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="XML Parsing Error: mismatched tag. Expected: tbody" view="/old-blog-entry.xhtml">
<UIParameter disable="false" id="j_id119" inView="true" name="str" rendered="true" transient="false" value="XML-Parsing-Error-mismatched-tag-Expected-a19c52f150df9094"/>
</HtmlLink>
</HtmlMenuItem>
<HtmlMenuSeparator id="j_id120" inView="true" rendered="true" transient="false"/>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id121" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id122" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="More..." view="/old-blog.xhtml"/>
</HtmlMenuItem>
</HtmlDropDownMenu>
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="800" horizontalOffset="0" id="j_id123" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="50" submitMode="none" transient="false" value="Seminars" verticalOffset="0">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id124" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id125" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Crash Course Seminar Series" view="/seminars/seminars.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id126" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id127" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Programming for Google Android" view="/seminars/android.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id128" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id129" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Web application security with JBoss Seam Security and JBoss Rules" view="/seminars/jboss-seam-security-rules.xhtml"/>
</HtmlMenuItem>
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id130" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id131" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Enterprise Web Application with JBoss Seam" view="/seminars/jboss-seam.xhtml"/>
</HtmlMenuItem>
</HtmlDropDownMenu>
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="800" horizontalOffset="0" id="j_id132" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="50" submitMode="none" transient="false" value="Contact" verticalOffset="0">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id133" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id134" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Contact information" view="/contact.xhtml"/>
</HtmlMenuItem>
</HtmlDropDownMenu>
<HtmlDropDownMenu direction="auto" disabled="false" disabledItemClass="" disabledItemStyle="" disabledLabelClass="" hideDelay="800" horizontalOffset="0" id="j_id135" inView="true" itemClass="" itemStyle="" jointPoint="auto" labelClass="" oncollapse="" onexpand="" ongroupactivate="" onitemselect="" onmousemove="" onmouseout="" onmouseover="" rendered="true" selectItemClass="" selectedLabelClass="" showDelay="50" submitMode="none" transient="false" value="Android store" verticalOffset="0">
<HtmlMenuItem ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id136" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" target="" timeout="-2147483648" transient="false">
<HtmlLink action=" disabled="false" id="j_id137" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="Android BIP-6000 rugged handset" view="/android-store/buy-htc-hero.xhtml"/>
</HtmlMenuItem>
</HtmlDropDownMenu>
</HtmlToolBarGroup>
<HtmlToolBarGroup id="j_id138" inView="true" itemSeparator="none" location="right" rendered="true" transient="false">
<HtmlOutputText escape="true" id="menuWelcomeId" inView="true" rendered="false" transient="false" value="signed in as: "/>
<HtmlLink action=" disabled="false" id="menuLoginId" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="false" transient="false" value="Login" view="/login.xhtml"/>
<HtmlLink action="#{identity.logout}" actionExpression="#{identity.logout}" disabled="false" id="menuLogoutId" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="false" transient="false" value="Logout" view="/home.xhtml"/>
</HtmlToolBarGroup>
</HtmlToolBar>
</div>
<div class="content">
<HtmlRichMessages ajaxRendered="true" errorClass="errormsg" globalOnly="true" id="messages" inView="true" infoClass="infomsg" keepTransient="false" layout="list" redisplay="true" rendered="true" showDetail="false" showSummary="true" styleClass="message" tooltip="false" transient="false" warnClass="warnmsg"/>
<style> .inplace{ border: none; } .hover { color: #{a4jSkin.generalTextColor}; background-color :#{a4jSkin.tipBorderColor}; } </style> <h1>Great new features in RichFaces 3.2: Inplace input and select</h1> <p style="font-style:italic;">July 12th, 2008</p> <h2>Introduction</h2> <p>If you're using JBoss Seam to build sites, you're probably using the RichFaces components which are automatically included in Seam-Gen projects. RichFaces provides good-looking components which satisfy most of the Web 2.0 and AJAX needs of developers. RichFaces is great because it lets developers create complex AJAX interactions with tags which are as simple as plain old HTML tags. You want to create a toggle panel, for example? Put this in:</p> <pre><rich:simpleTogglePanel switchType="client" label="A RichFaces simpleTogglePanel"> This is a simple Web 2.0 type effect created using RichFaces. As you can see, this component is just as easy to create as any ordinary HTML. </rich:simpleTogglePanel> </pre> <p>and the result is:</p>
<HtmlSimpleTogglePanel ajaxSingle="false" bypassUpdates="false" id="j_id142" ignoreDupResponses="false" immediate="false" inView="true" iterationState="[Ljava.lang.Object;@6219de46" label="A RichFaces simpleTogglePanel" limitToList="false" oncollapse="" onexpand="" opened="true" rendered="true" requestDelay="-2147483648" switchType="client" timeout="-2147483648" transient="false" width="">
This is a simple Web 2.0 type effect created using RichFaces. As you can see, this component is just as easy to create as any ordinary HTML.
</HtmlSimpleTogglePanel>
<p>RichFaces 3.2 added two particularlly great new input components: rich:inplaceInput and rich:inplaceSelect. We'll show how to use these great inputs, and we'll also create a new textarea input that uses the same input style.</p> <h2>rich:inplaceInput and rich:inplaceSelect</h2> <p>The documentation gives all the details on these components. I'll just show my favorite style of using them. Try it out, by double-clicking:</p>
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_id145" inView="true" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlPanel id="inplace-demo-panel" inView="true" rendered="true" style="width:6cm;" transient="false">
<HtmlInplaceInput changedClass="inplace" changedHoverClass="hover" controlsHorizontalPosition="right" controlsVerticalPosition="center" defaultLabel="" editEvent="ondblclick" id="testInput" immediate="false" inView="true" layout="block" localValueSet="false" maxInputWidth="500px" maxlength="-2147483648" minInputWidth="40px" onviewactivated="A4J.AJAX.Submit('j_id145',event,{'similarityGroupingId':'j_id145:j_id146','parameters':{'j_id145:j_id146':'j_id145:j_id146'} ,'actionUrl':'/richfaces\x2Djboss\x2Dinplace\x2Dinput/inplace\x2Dinput\x2Dtextarea.seam;jsessionid=D0ED2F48384016C2B4F27107C673791B'} )" rendered="true" required="true" selectOnEdit="true" showControls="true" tabindex="-2147483648" transient="false" valid="true" viewClass="inplace" viewHoverClass="hover">
org.ajax4jsf.ajax.SUPPORTonviewactivated
<HtmlAjaxSupport ajaxSingle="false" bypassUpdates="false" disableDefault="false" disabled="false" event="onviewactivated" id="j_id146" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" timeout="-2147483648" transient="false"/>
</HtmlInplaceInput>
<HtmlMessage for="testInput" id="j_id147" inView="true" redisplay="true" rendered="true" showDetail="true" showSummary="false" style="color: red;" tooltip="false" transient="false"/>
</HtmlPanel>
</HtmlForm>
<p>Use the small controls that pop up to the right to set the value, or to cancel the change. Try setting it to a blank value to see a validation error.</p> <p>We use an A4J support component to AJAX-submit:</p> <pre> <h:form> <rich:panel style="width:6cm;" id="inplace-demo-panel"> <rich:inplaceInput id="testInput" layout="block" value="#{inplaceDemos.value}" required="true" showControls="true" changedHoverClass="hover" viewHoverClass="hover" viewClass="inplace" changedClass="inplace" selectOnEdit="true" editEvent="ondblclick"> <a:support event="onviewactivated" reRender="inplace-demo-panel"/> </rich:inplaceInput> <h:message style="color: red;" for="testInput" /> </rich:panel> </h:form> </pre> <p>This is a great component of a form. You can display the values in a panel layout, and if the user wants to change a value, he double-clicks on it, enters it, and hits the submit control. It keeps your display looking like a display of information, not like a web form, and it provides a good way for a user to selectively edit one field at a time.</p> <p>There's a select-one counterpart to the rich:inplaceInput field. Try this:</p>
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_id149" inView="true" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlPanel id="selectPanel" inView="true" rendered="true" style="width:5cm;" transient="false">
<HtmlInplaceSelect changedClass="inplace" controlsHorizontalPosition="right" controlsVerticalPosition="center" defaultLabel="Please select" editEvent="ondblclick" editOnTab="true" id="j_id150" immediate="false" inView="true" layout="block" listHeight="200px" listWidth="200px" localValueSet="false" maxSelectWidth="200px" minSelectWidth="100px" onviewactivated="A4J.AJAX.Submit('j_id149',event,{'similarityGroupingId':'j_id149:j_id155','parameters':{'j_id149:j_id155':'j_id149:j_id155'} ,'actionUrl':'/richfaces\x2Djboss\x2Dinplace\x2Dinput/inplace\x2Dinput\x2Dtextarea.seam;jsessionid=D0ED2F48384016C2B4F27107C673791B'} )" openOnEdit="true" rendered="true" required="false" selectOnEdit="true" selectWidth="" showControls="true" showValueInView="false" tabindex="-2147483648" transient="false" valid="true" viewClass="inplace" viewHoverClass="hover">
org.ajax4jsf.ajax.SUPPORTonviewactivated
<HtmlAjaxSupport ajaxSingle="false" bypassUpdates="false" disableDefault="false" disabled="false" event="onviewactivated" id="j_id155" ignoreDupResponses="false" immediate="false" inView="true" limitToList="false" rendered="true" requestDelay="-2147483648" timeout="-2147483648" transient="false"/>
<UISelectItem id="j_id151" inView="true" itemDisabled="false" itemEscaped="true" itemLabel="Spicy" itemValue="1" noSelectionOption="false" rendered="true" transient="false"/>
<UISelectItem id="j_id152" inView="true" itemDisabled="false" itemEscaped="true" itemLabel="Medium" itemValue="2" noSelectionOption="false" rendered="true" transient="false"/>
<UISelectItem id="j_id153" inView="true" itemDisabled="false" itemEscaped="true" itemLabel="Mild" itemValue="3" noSelectionOption="false" rendered="true" transient="false"/>
<UISelectItem id="j_id154" inView="true" itemDisabled="false" itemEscaped="true" itemLabel="None" itemValue="4" noSelectionOption="false" rendered="true" transient="false"/>
</HtmlInplaceSelect>
</HtmlPanel>
</HtmlForm>
<p>The source is similar to the text input:</p> <pre> <h:form> <rich:panel id="selectPanel" style="width:5cm;"> <rich:inplaceSelect value="#{inplaceDemos.selectValue}" openOnEdit="true" showControls="true" editEvent="ondblclick" layout="block" viewClass="inplace" changedClass="inplace" changedHoverClass="hover" defaultLabel="Please select" viewHoverClass="hover"> <f:selectItem itemValue="1" itemLabel="Spicy"/> <f:selectItem itemValue="2" itemLabel="Medium"/> <f:selectItem itemValue="3" itemLabel="Mild"/> <f:selectItem itemValue="4" itemLabel="None"/> <a:support event="onviewactivated" reRender="selectPanel"/> </rich:inplaceSelect> </rich:panel> </h:form> </pre> <h2>What about text areas?</h2> <p>These are great, but what about text areas? Unfortunately, there is no textarea input component.</p> <p>What we want is a text area that allows this in-place style of editting. It should also accept Seam text, and show Seam text validation messages. Fortunately, with a little bit of JavaScript, we can build this.</p> <p>First, here's what it looks like in action. Go ahead and double-click to edit. Make some changes. Use some <a target="_blank" href="http://docs.jboss.com/seam/latest/reference/en-US/html/text.html">Seam text</a>. Make a Seam text error and click the "submit" control to see the validation error. An easy error is to leave an unclosed format directive, such as a single =. </p>
<div xmlns="http://www.w3.org/1999/xhtml"> <script> function showEdit() { document.getElementById("editDiv").style.display="block"; document.getElementById("displayDiv").style.display="none"; } function hideEditIfValid() { // check to see if the error div is // empty or not if(document.getElementById("textError").hasChildNodes()) { // FAIL document.getElementById("displayDiv").style.display="none"; return; } document.getElementById("displayDiv").style.display="block"; document.getElementById("editDiv").style.display="none"; } function cancelEdit() { document.getElementById("editForm:editArea").value = document.getElementById("savedText").value; document.getElementById("displayDiv").style.display="block"; document.getElementById("editDiv").style.display="none"; var errorNode = document.getElementById("textError"); if(errorNode.hasChildNodes()) while (errorNode.childNodes.length >= 1) errorNode.removeChild(errorNode.firstChild); return false; } </script> <style>.error { color: red; }</style>
<HtmlPanel id="displayDiv" inView="true" ondblclick="showEdit();" rendered="true" transient="false">
<HtmlFormattedText id="j_id158" inView="true" rendered="true" transient="false"/>
</HtmlPanel>
<HtmlPanel id="editDiv" inView="true" rendered="true" style="display:none;" transient="false">
<HtmlForm enctype="application/x-www-form-urlencoded" id="editForm" inView="true" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlInputTextarea cols="-2147483648" disabled="false" id="editArea" immediate="false" inView="true" localValueSet="false" readonly="false" rendered="true" required="false" rows="-2147483648" style="width:100%;" transient="false" valid="true"/>
<div style="text-align:right;margin-top:-0.5cm;">
<HtmlAjaxCommandButton ajaxSingle="false" bypassUpdates="false" disabled="false" id="j_id160" ignoreDupResponses="false" image="/richfaces-jboss-inplace-input/ok.png" immediate="false" inView="true" limitToList="false" oncomplete="hideEditIfValid();" rendered="true" requestDelay="-2147483648" size="-2147483648" style="background-color:#ECF4FE;border:solid;border-width:1px;" timeout="-2147483648" transient="false" value="save"/>
<HtmlGraphicImage id="j_id161" inView="true" ismap="false" onclick="cancelEdit();" rendered="true" style="background-color:#ECF4FE;margin:0px;padding:0px;border:solid;border-width:1px;cursor:pointer;" transient="false" url="/richfaces-jboss-inplace-input/cancel.png" value="/richfaces-jboss-inplace-input/cancel.png"/>
</div>
</HtmlForm>
<HtmlDiv id="textError" inView="true" rendered="true" transient="false">
<HtmlMessage for="editArea" id="j_id163" inView="true" redisplay="true" rendered="true" showDetail="true" showSummary="false" styleClass="error" tooltip="false" transient="false"/>
</HtmlDiv>
<div style="clear:both;"/>
</HtmlPanel>
<HtmlInputTextarea cols="-2147483648" disabled="false" id="savedText" immediate="false" inView="true" localValueSet="false" readonly="false" rendered="true" required="false" rows="-2147483648" style="display:none;" transient="false" valid="true"/>
</div>
<p>This is the nice way to do text input. How does it work?</p> <h2>Building the inplace edit textarea</h2> <p>Download the source: <a href="richfaces-sample-code.zip">richfaces-sample-code.zip</a>. This file contains the XHTML for the component, a test page that uses it, and the simple Seam component that it interacts with.</p> <p>The display of the text is simple. We put it in a rich:panel, using s:formattedText to render the Seam text. This shows how easy it is to attach a JavaScript function to any RichFaces component:</p> <pre> <rich:panel id="displayDiv" <u>ondblclick</u>="showEdit();" > <s:formattedText value="#{text}"/> </rich:panel> </pre> <p>This is the function that happens when the user double-clicks:</p> <pre> function showEdit() { document.getElementById("editDiv").style.display="block"; document.getElementById("displayDiv").style.display="none"; } </pre> <p>All it does is switch the editDiv display style to <code>block</code> and sets the displayDiv style to <code>none</code>, hiding it.</p> <p>Now let's look at the editDiv:</p> <pre> <rich:panel id="editDiv" style="display:none;"> <h:form id="editForm"> <h:inputTextarea id="editArea" value="#{text}" style="width:100%;"> <s:validateFormattedText /> </h:inputTextarea> <div style="text-align:right;margin-top:-0.5cm;"> <a:commandButton style="background-color:#ECF4FE;border:solid;border-width:1px;" image="/components/ok.png" value="save" reRender="displayDiv,savedText,textError" oncomplete="hideEditIfValid();"/> <h:graphicImage onclick="cancelEdit();" url="/components/cancel.png" style="background-color:#ECF4FE;margin:0px;padding:0px;border:solid;border-width:1px;cursor:pointer;"/> </div> </h:form> <s:div id="textError"> <h:message for="editArea" styleClass="error"/> </s:div> <div style="clear:both;"/> </rich:panel> </pre> <p>We have a basic <code>h:inputTextarea</code> with a <code>s:validateFormattedText</code>. That's the universal way of doing Seam text input.</p> <p>We've also created a <code>div</code> to hold the controls. We've right-aligned it and bumped it up by 0.5cm with a negative <code>margin-top</code> setting.</p> <p>Within the controls <code>div</code> we have two controls: one to save the changes and the other to cancel the changes.</p> <p>Here's the save changes button:</p> <pre><a:commandButton style="background-color:#ECF4FE;border:solid;border-width:1px;" image="/components/ok.png" value="save" reRender="displayDiv,savedText,textError" <u>oncomplete</u>="hideEditIfValid();"/> </pre> <p>This is an A4J <code>commandButton</code>, which allows an AJAX-style submit and re-rendering of selected components. We want it to rerender three components:</p> <ul> <li><code>displayDiv</code></li> <li><code>textError</code></li> <li><code>savedText</code></li> </ul> <p>Why we re-render <code>displayDiv</code> and <code>textError</code> is clear. <code>savedText</code> is more interesting:</p> <pre> <h:inputTextarea id="savedText" style="display:none;" value="#{text}"/> </pre> <p>The purpose of <code>savedText</code> is to hold the value of the text before the user edits it. The save button must re-render <code>savedText</code> when the value binding changes, so that the <code>savedText</code> will always reflect the last successfully saved text. Note that if validation fails (ie, there is a Seam text error) <code>savedText</code> is not updated because the apply values phase doesn't succeed, so the value binding is not changed.</p> <p>There's a key bit of JavaScript on this <code>a:commandButton</code>: <code>oncomplete="hideEditIfValid();"</code>. The <code>oncomplete</code> event is triggered <i>after</i> the apply values phase is complete and the UI has been re-rendered on the browser. This is your hook for executing JavaScript after RichFaces and JSF are done with their work. And we'll use this hook to decide which divs to display. If the save was successful, we want to hide the edit div and the error div. If the save was not successful, there was a validation error, and we want to show the error and the edit div, and hide the display div. Here's the function that does it:</p> <pre> function hideEditIfValid() { // check to see if the error div is // empty or not. It would be nice // if there were a RichFaces function // to check a component for errors, but // it works fine to do it this way. if(document.getElementById("textError").hasChildNodes()) { // re-hide the display, and let the editing continue document.getElementById("displayDiv").style.display="none"; return; } // The update was valid, so hide the edit div. document.getElementById("displayDiv").style.display="block"; document.getElementById("editDiv").style.display="none"; } </pre> <p>Note that within JSF you can check to see if there are Faces messages using this idiom:</p> <pre>rendered="#{facesContext.maximumSeverity==null}"</pre> <p>In this case, we did it within JavaScript, so we checked for child elements. Could the idiom above be used instead? That's left as an excercise for the reader.</p> <p>Now on to the cancel control:</p> <pre><h:graphicImage onclick="cancelEdit();" url="/components/cancel.png" style="background-color:#ECF4FE;margin:0px;padding:0px;border:solid;border-width:1px;cursor:pointer;"/> </pre> <p>First, why isn't this an HTML <code>button</code>? I tried using a button first, putting an <code>onclick</code> event binding on it. It worked as epxected. Unfortunately, the different browsers render to <code>button</code> in significantly different ways. For instance, FireFox 3 added left and right padding in the <code>button</code> even if I set <code>padding:0px;</code>. Konqueror didn't do that. I don't understand this. I tried a few things, but couldn't make something that was clean and cross-browser. Rather than fight that, it was easiest to turn an image into a button, using the right CSS and JavaScript. The key is the <code>onclick</code> event listener, to detect when the user clicks, and the <code>cursor:pointer;</code> style, to give the user the visual cue that this is a clickable button. With those two elements in place, it is a button in every respect, except it doesn't go to a "depressed" look when clicked. In this case, the button disappears as soon as it is clicked, so no depressed button image is needed. If one were needed, that could also be done with JavaScript. We have built our own faux button control, without using a button.</p> <p>Second, how does this cancel button work? It has an <code>onclick</code> listener which calls the <code>cancelEdit()</code> function:</p> <pre> function cancelEdit() { document.getElementById("editForm:editArea").value = document.getElementById("savedText").value; document.getElementById("displayDiv").style.display="block"; document.getElementById("editDiv").style.display="none"; var errorNode = document.getElementById("textError"); if(errorNode.hasChildNodes()) while (errorNode.childNodes.length >= 1) errorNode.removeChild(errorNode.firstChild); return false; } </pre> <p>This function grabs the saved text value from the hidden <code>textarea</code>, and saves it to the visible <code>textarea</code>. Also, because we're cancelling the edit, any validation errors can be cleared out. Invalid input is never bound to the value binding, so the errors that were there are irrelevant. We clear the error div by simply removing all the child nodes. And of course we need to change the display style settings to make the view div visible <code>display:block;</code>and the edit div invisible (<code>display:none;</code>).</p> <h2>Conclusion</h2> <p>We have used the two new inplace components that come with RichFaces 3.2. We have also built a component for Seam which allows inplace style editing of a textarea, with Seam text validation. These components are a great way to do a user interface. Check back later, and we'll put up screen shots of these components being used in actual applications.</p> <h2>If you want to learn JBoss Seam</h2> <p>We're offering a
<HtmlOutputText escape="true" id="j_id167" inView="true" rendered="true" transient="false" value=" "/>
<HtmlLink action=" disabled="false" id="j_id168" immediate="false" inView="true" includePageParams="true" propagation="" rendered="true" transient="false" value="JBoss Seam seminar" view="/seminars/jboss-seam.xhtml"/>
<HtmlOutputText escape="true" id="j_id169" inView="true" rendered="true" transient="false" value=" "/>
where you can accelerate yourself and your team and start building great web applications with all the power of RichFaces and JBoss Seam.</p> <h2>Download the source for this article</h2> <p>Download the source: <a href="richfaces-sample-code.zip">richfaces-sample-code.zip</a>.</p>
</div> <p class="footer">Copyright 2003-
<HtmlOutputText escape="true" id="j_id172" inView="true" rendered="true" transient="false" value="2013"/>
, Chiral Software, Inc.
<HtmlOutputText escape="true" id="j_id174" inView="true" rendered="true" transient="false" value=" "/>
<HtmlLink action=" disabled="false" id="j_id175" immediate="false" inView="true" includePageParams="true" propagation="none" rendered="true" transient="false" value="colophon" view="/colophon.xhtml"/>
</p> </body> </html>
</AjaxViewRoot>

+ Scoped Variables

Request Parameters
NameValue
None
Request Attributes
NameValue
ajaxContextorg.ajax4jsf.context.AjaxContextImpl@104ff7fb
calendarComponentscom.chiralsoftware.chiralv3.session.CalendarComponents@7221881a
oldBlogEntryQuerycom.chiralsoftware.chiralv3.session.OldBlogEntryQuery@776e9d7f
Session Attributes
NameValue
None
Application Attributes
NameValue
a4jSkinSkinImpl: {warningBackgroundColor=#FF0000, headerWeightFont=bold, tableBorderColor=#C0C0C0, controlTextColor=#000000, headerTextColor=#000000, generalTextColor=#000000, selectControlColor=#E79A00, headerGradientColor=#F2F7FF, tableSubfooterBackgroundColor=#f1f1f1, trimColor=#D6E6FB, shadowOpacity=1, tipBorderColor=#E5973E , calendarCurrentBackgroundColor=#FF7800, subBorderColor=#ffffff, editorBackgroundColor=#F1F1F1, generalLinkColor=#0078D0, gradientType=plain, tabSizeFont=11, calendarHolidaysTextColor=#FF7800, buttonSizeFont=11, headerBackgroundColor=#BED6F8, hoverLinkColor=#0090FF, tabFamilyFont=Arial, Verdana, sans-serif, calendarSpecBackgroundColor=#E4F5E2, calendarHolidaysBackgroundColor=#FFEBDA, tabDisabledTextColor=#8DB7F3, tableBorderWidth=1px, buttonFamilyFont=Arial, Verdana, sans-serif, generalFamilyFont=Arial, Verdana, sans-serif , tableBackgroundColor=#FFFFFF, calendarWeekBackgroundColor=#F5F5F5, tipBackgroundColor=#FAE6B0 , calendarCurrentTextColor=#FFEBDA, editBackgroundColor=#FEFFDA, shadowBackgroundColor=#000000, headerFamilyFont=Arial, Verdana, sans-serif, tableFooterBackgroundColor=#cccccc, additionalBackgroundColor=#ECF4FE, panelBorderColor=#BED6F8, visitedLinkColor=#0090FF, controlBackgroundColor=#ffffff, calendarSpecTextColor=#000000, tabBackgroundColor=#C6DEFF, generalBackgroundColor=#FFFFFF, generalSizeFont=11px, warningColor=#FFE6E6, headerSizeFont=11px}
csfcffcom.sun.faces.context.flash.ELFlash@1255fb01
securityRulesorg.jboss.seam.drools.RuleBase@4ad2080e
May 22, 2013 9:51:40 PM - Generated by Facelets