URGENT: How to build composite custom component with a valuechangelistener?

Hi there!
I already posted regarding this issue before but unfortunately there wasn't any answer. But I don't think what I am trying to achieve is something unusual.
I am trying to build a composite custom component, that consists of some UISelectOne components and some UIInputText fields. Now I need to fill the combo boxes depending on the selected values of the other boxes. Therefore I added a value change listener. But when it fires I get an index out of bounds exception on the page.
The problem seems to be that the child components are being added twice to the component: Once in the constructor (which I am doing and which is called everytime the component is built) and once as part of the Restore View Phase (which JSF is doing).
So my question is: How and where do I correctly initialize my component's children?
A full code example can be found under http://forum.java.sun.com/thread.jspa?threadID=586301&tstart=150
Thanks a lot in advance!

#2 sounds utterly strange to me. How would I utilize the phase id?The code below shows my idea whereas I never validate it in any real projects:
public class MyPhaseListener implements PhaseListener {
     private static final String IDKEY = "PHASEID";
     public static PhaseId getCurrentPhaseId() {
          return (PhaseId) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(IDKEY);
     public void beforePhase(PhaseEvent event) {
event.getFacesContext().getExternalContext().getRequestMap().put(IDKEY,event.getPhaseId());
     public PhaseId getPhaseId() {
          return PhaseId.ANY_PHASE;
}You can write your constructor like as:
if (MyPhaseListener.getCurrentPhaseId().equals(PhaseId.RENDER_RESPONSE ) {
     /* create children because this is the first time to create the component */
}

Similar Messages

  • How to code spark custom component with variable number of (skin)parts?

    Hello. I'm trying to code a complex Spark custom component that may have a variable number of parts. To help you understand the requirements, the component can be visualized as an HSlider with a unlimited number of thumbs (as opposed to one).
    How do I, in general, represent these thumbs in the host component as well as the skin? If I had a fixed number of thumbs, say 5, I could easily represent them as 5 button SkinParts declaratively. However, it's not immediately clear to me how to deal with a variable number of them.
    I've studied the HSlider implementation as well as other components and can't find an example that fits this pattern. The closest thing that I can think of is to represent the thumbs as a DataGroup and provide a custom item renderer to render them. Couple that with the general HSlider behaviors that I need to preserve, such as the fairly involved local/global coordinate translations, I don't know whether the approach will work.
    Any better ideas? Thanks.

    #2 sounds utterly strange to me. How would I utilize the phase id?The code below shows my idea whereas I never validate it in any real projects:
    public class MyPhaseListener implements PhaseListener {
         private static final String IDKEY = "PHASEID";
         public static PhaseId getCurrentPhaseId() {
              return (PhaseId) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(IDKEY);
         public void beforePhase(PhaseEvent event) {
    event.getFacesContext().getExternalContext().getRequestMap().put(IDKEY,event.getPhaseId());
         public PhaseId getPhaseId() {
              return PhaseId.ANY_PHASE;
    }You can write your constructor like as:
    if (MyPhaseListener.getCurrentPhaseId().equals(PhaseId.RENDER_RESPONSE ) {
         /* create children because this is the first time to create the component */
    }

  • Custom component with additional tags

    Hi. I need to write complicated custom JSF component.
    I know how to write simple custom components, and receive String variables from tag attributes e.g.
    https://github.com/devalentino/temp/blob/master/src/main/java/net/monopolyclub/components/component/UserData.java
    But now I need to write custom component with additional tags (for example like dataTable and column tags).
    How can I write such component? How can I receive collections in my component? How can I work with additional tags in my component.
    for example I need something like:
    <m:chat>
         <m:tab value="#{UserList}" />
         <m:message value="#{MesageMap}" />
    </m:chat>
    where UserList - Collection with current users and MessageMap is Map with User as key and message as value.

    Iam using pt:ptdata.joincurrcommunitydata
    here is some code
    <pt:ptdata.joincurrcommunitydata pt:id="menutabsjoin" />
    <pt:logic.foreach pt:var="temp2" pt:data="menutabsjoin">
    <span class="CommunityPage">
    <pt:core.html href="$temp2.url" pt:tag="a">
    <pt:core.html pt:tag="img" src="$temp2.img" alt="$temp2.title" border="0" align="absmiddle" height="$temp2.imgheight"      width="$temp2.imgwidth" />
                        <pt:logic.value pt:value="$temp2.title" />
                             </pt:core.html>
                             </span>
                             </pt:logic.foreach>
    But the URL that is generated is not having the CommunityID, hence it errors out saying object not found.
    Any help would be appreciated?
    Thanks
    kartik

  • How to deploy or extract component with WDA extension in portal

    hi masters
            how to deploy or extract component with WDA extension in portal?
    thanks and reagrds
    johny

    do you want to integrate WDA in portal?
    just create an WDA iview
    Thanks
    Bala Duvvuri

  • How to build a Google+ app with Aurora7? Fluid and WebRunner not compatible.

    How to build a Google+ app with Aurora7?
    Fluid and WebRunner not compatible.

    Hi,
    For portability issues always develop applications using sun implementation which can be configured for any vendor application servers.
    Web services developed with jwsdp will work in webloigc 8.1 simply, take the examples from sun and simply deploy it in weblogic 8.1 it will work like gem with simple settings.
    Just change the libraries with jwsdp ones.Place the
    jwsdp lib.How to do this is ; place all these jars in the classpath before the exisiting classpath configuration.
    Classpath=jwsdplibs;......
    This is enough for deploying the webservice server side.
    For using the client you have to change the default soap libraries used by weblogic with sun jar files.
    See example from bea for client implementation.override the system property.

  • How to build an OData Service with Gateway Service Builder (NO DDIC, BOR import)

    Hi Community,
    I hope to get an answer here to finish my project. I´m a newbie to the sap gateway service builder. Please provide me a helping hand.
    I have a problem I´m sure someone out there can help me.
    I need to create an sap ui app, which is monitoring our database behaviour (->transaction st06) is there someone who knows how to build a OData Channel with sap gateway service builder without importing a BOR- Object, or a DDIC?
    Or how to build an OData channel which exposes the database (monitoring) data from ST06?
    I would really appreciate if someone could help me.
    THANKS!
    JOE

    Hello Joe,
    If u do not want to import any Structure or BOR- Object, u can follow below steps :
    1. Create ur data model by adding the properties manually in SAP GW service builder with correct Edm    types.Doing this would be pain in my opinion ( sometimes we are forced to do this but no other option    doing this way )
       Create associations & navigation needed. 
    2. U can generate run-time objects.
    3. Go to appropriate classes and implement methods with ur Business Logic.
    4. Register ur service & consume.
    U can also import RFC to create data model and create mapping as per required by implementing correct method as well.
    once u do this generate objects and register service and consume it.
    Check this out for ur info :
    Detailed step by step procedure for Creating Gateway Service with all the CRUD Operations and testing them in Service Explorer Part1 
    Regards,
    Ashwin

  • How to build a custom Flash CS3 component

    I just googled in the hope to find some resources about how
    to build custom Flash CS3 components, but nothing turned up. I also
    couldn't find any info on Adobe's Flash developers center.
    Do you know of any resource that sheds some light on this
    subject?
    If not then I'll have to try to find my way around custom
    components by learning from the ones that came with Flash CS3 I
    guess.

    Flash CS3 has been out for a few weeks. At this point, your
    best bet is Amazon books or Barnes & Noble. I've read a few
    books that should shed light on the subject. Otherwise, you'll need
    to wait a few more weeks while people start hashing it out and
    posting it to blogs and other sites.

  • Best practices for adding components in a composite custom component

    Hello,
    I am developing a custom, composite JSF component need to dynamically add child components in my renderer class. I've noticed that people add components to a custom component in many different ways. I'd like to follow JSF best practices when developing this component - of the following approaches, which would you recommend? Or is there yet another approach I should be using?
    1) in the encodeBegin method of my renderer class, create a new component, add it to the component tree, and let the page life cycle take care of the rendering:
    HtmlDataList dimensionStateGroupDataList = (HtmlDataList) app.createComponent( HtmlDataList.COMPONENT_TYPE );
    //set properties on dimensionStateGroupDataList
    component.getChildren().add(dimensionStateGroupDataList);
    2) in either the encodeBegin or encodeEnd method, create a component and encode it:
    HtmlDataList dimensionStateGroupDataList = (HtmlDataList) app.createComponent( HtmlDataList.COMPONENT_TYPE );
    //set properties on dimensionStateGroupDataList
    dimensionStateGroupDataList.encodeBegin();
    dimensionStateGroupDataList.encodeEnd();
    Both of these methods are functional, and I prefer the first (why encode children if you don't have to?), but I am interested in other people's take on how this should be done.
    Thanks for your help.
    -Christopher

    My bad, sorry, wasnt concentrating, Im afraid I have no experience with portlets, but I would have thought that you can mimic the outputLinkEx in you renderer by encoding your own links?
    If you were to bind a backing bean variable to an outputLinkEx what would it be? Not understanding portlets, or knowing what an outputLinkEx is may be hindering me, but you should be able to create an instance of it in code like (this example uses HtmlOutputLink, you would need to know which component to use):
    HtmlOutputLink hol = new HtmlOutputLink();
    hol.set....Then set any attributes on it, and explicitly call its encodeStart, encodeEnd functions. Is that way off the mark.

  • Writing a custom component with multiple fields.

    Does anyone have some pointers on writing a custom component that properly handles multiple input fields?
    An example usage might be as follows:
    Assume the following java classes:
    public interface Address {
        //... getters/setters for Address.
    public class Company{
        Address getAddress(){...};
    }The tag usage might be something like the following:
    <custom:address value="#{myCompanyBean.address}" />
    Extending UIComponentBase I can easily render the output and create all the needed input elements. I'm also able to properly retrieve the submitted values in the decode method. But I'm unsure how to handle the "UpdateModelValues" step. Do I simply over-ride processUpdates, or is there more housekeeping to be done?
    Thanks.

    I'm guessing that doing addChild inside createChildren causes an infinite loop.
    Why aren't you just doing this with MXML?  it would be a lot simpler.

  • How to create a custom kernel with initrd and ARCH patches

    Hi,
    I like the default kernel because everything seems to work well and I think the Arch kernel includes patches I need (such as the mactel patch). But some options that i would like to be enabled are not. in fact i would like to use powertop but i can't because it needs the CONFIG_TIMER_STATS option.
    What I would like is a kernel based on the arch kernel but with a different config file. Nothing more.
    if i look at the solution on the Wiki, I see that I have to add all patches the standard kernel have ... Moreover there is no initrd creation. i think i will need it if I use the Arch kernel configuration.
    And if i use the kernel26 PKGBUILD, I must change the package name in order to keep my current kernel. It's easy to do in the PKGBUILD but much more complicated to do it in the kernel26.install file beacuse I have to change the filenames in /boot and I do not want to replace the kernel26 files.
    So do you have any ideas how to compile my custom kernel ? Is there a better solution ?
    Thanks.
    Mildred.
    Last edited by mildred (2007-07-03 01:46:33)

    tomk wrote:It's possible I'm missing something here, but I don't understand what you're worried about. If I understand correctly, you now have a PKGBUILD and associated files for kernel26mildred (or whatever you've decided to call it). Why do you think you would have to change the files again when kernel26 is updated?
    don't the patches change from version to version?
    anyways, i was bored so i wrote a little script... edit the configuration variables at the top and it'll do the work for you. just put it in /var/abs/kernels or wherever you have the kernel26/ at, chmod +x scriptname, and run.
    if you're in /var/abs/kernels you'll probably have to run as root.
    from my testing, it seems to be all working (looking at resulting files and no errors so far from makepkg); but i'm still building my test kernel with it.
    #!/bin/bash
    # Author: kano <[email protected]>
    # Configuration #
    appendname="-custom1" # Name to append to kernel package
    BUILD=0 # Build package when done? No = 0; Yes = 1
    #MAKEPKGOPT="" # Uncomment if you're building after you make; Add any options you want passed to makepkg (can be nothing)
    # Work starts here; shouldn't have to edit anything below #
    mkdir kernel26${appendname}/
    cp kernel26/* kernel26${appendname}/
    regen_md5sum() {
    if [ ${file} != 'PKGBUILD' ]; then
    echo "Regenerating md5sum for ${file}"
    cat kernel26${appendname}/PKGBUILD \
    | sed "s/'`md5sum kernel26/${file} | awk '{ print $1 }'`'/'`md5sum kernel26${appendname}/${file} | awk '{ print $1 }'`'/;" \
    > PKGBUILD.tmp
    mv PKGBUILD.tmp kernel26${appendname}/PKGBUILD
    fi
    for file in "PKGBUILD" "kernel26.preset" "kernel26.install"; do
    echo "Editing ${file}"
    cat kernel26/${file} | \
    sed "s/kernel26/kernel26${appendname}/g" \
    | sed "s/vmlinuz26/vmlinuz26${appendname}/g" \
    | sed "s/kconfig26/kconfig26${appendname}/g" \
    | sed "s/System.map26/System.map26${appendname}/g" \
    > kernel26${appendname}/${file}
    # Regenerate md5sum
    regen_md5sum
    done
    for file in "config" "config.x86_64"; do
    echo "Editing ${file}"
    cat kernel26/${file} | \
    sed "s/CONFIG_LOCALVERSION=\"-ARCH\"/CONFIG_LOCALVERSION=\"-ARCH${appendname}\"/" \
    > kernel26${appendname}/${file}
    # Regenerate md5sum
    regen_md5sum
    done
    mv kernel26${appendname}/mkinitcpio-kernel26.conf kernel26${appendname}/mkinitcpio-kernel26${appendname}.conf
    mv kernel26${appendname}/kernel26.install kernel26${appendname}/kernel26${appendname}.install
    mv kernel26${appendname}/kernel26.preset kernel26${appendname}/kernel26${appendname}.preset
    # Add make menuconfig to PKGBUILD
    cat kernel26${appendname}/PKGBUILD | \
    sed 's/# load configuration/\n # configure kernel before build\n make menuconfig\n\n # load configuration/;' \
    > PKGBUILD.tmp
    mv PKGBUILD.tmp kernel26${appendname}/PKGBUILD
    echo "Custom kernel pkgbuild created."
    # To build or to not to build?
    if [ ${BUILD} -eq 1 ]; then
    cd kernel26${appendname}
    makepkg ${MAKEPKGOPT}
    fi

  • Problem custom component with children in RestoreView phase

    Hi there!
    I've got a problem with a custom component that I am writing. It consists of several UISelectOne and UIInputText components. Depending on the value selected in the UISelectOne components, the UISelectOne and UIInputText components may change. Therefore I attached a ValueChangeListener to the UISelectOne components. So far, so good.
    The problem is, when the event is triggered, I get an ArrayIndexOutOfBoundsException. It took me a while to track it down. The problem seems to be, that during the Restore View phase, the StateManager's restoreComponentTreeStructure method first creates the component again and later restores its tree structure.
    During creation of the component, its constructor is called in which I add the children to the component. While restoring the tree structure, the StateManager again adds the children to the component. So the list of my component's children contains each child twice.
    The exception is due to the fact that in the saved state array only the original component's states are saved (which is perfectly right). So while restoring state and iterating through the component's children, the exception is thrown for the first child which is twice in the list (which is also perfectly right).
    I hope this description is not too confusing. My question is, if anyone can give me a hint what I am doing wrong here? How can I avoid the component being initialized again? Or where should I add the children to the component?
    Thanks for any advices!

    Hi again,
    I've perpared a minimal example (which in fact is quite big, but considering it's a custom tag it's probably not possible to make it smaller):
    The UITest class (as you can see I add the child component in the constructor):
    package test;
    import java.io.IOException;
    import java.util.*;
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.application.Application;
    import javax.faces.component.*;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
    import javax.faces.event.ValueChangeEvent;
    import javax.faces.model.SelectItem;
    public class UITest extends UIInput {
      public static final String COMPONENT_TYPE = "Test";
      public static final String COMPONENT_FAMILY = "Test";
      private UISelectOne selectOne;
      private UISelectItems selectItems;
      public UITest(){
        Application application = FacesContext.getCurrentInstance().getApplication();
        selectItems = (UISelectItems)application.createComponent(UISelectItems.COMPONENT_TYPE);
        List items = new ArrayList();
        items.add(new SelectItem("One", "one"));
        items.add(new SelectItem("Two", "two"));
        selectItems.setValue(items);
        selectOne = (UISelectOne)application.createComponent(UISelectOne.COMPONENT_TYPE);
        selectOne.getAttributes().put("onchange", "submit()");
        Class[] params = {ValueChangeEvent.class};
        selectOne.setValueChangeListener(application.createMethodBinding("#{TestBean.valueChange}", params));
        selectOne.getChildren().add(selectItems);
        this.getChildren().add(selectOne);
      public void encodeChildren(FacesContext context) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        Iterator children = getChildren().iterator();
        while(children.hasNext()){
          UIComponent child = (UIComponent)children.next();
          if(child.isRendered()){
            child.encodeBegin(context);
            if(child.getRendersChildren()){
              child.encodeChildren(context);
            child.encodeEnd(context);
      public boolean getRendersChildren(){
        return true;
    }The component tag class:
    package test;
    import javax.faces.webapp.UIComponentTag;
    public class TestTag extends UIComponentTag {
      public String getComponentType() {    return "Test";  }
      public String getRendererType() {    return null;  }
    }Tag registration:
      <tag>
        <name>test</name>
        <tag-class>test.TestTag</tag-class>
      </tag>The backing bean:
    package test;
    import javax.faces.event.ValueChangeEvent;
    public class TestBean {
      private String currentValue;
      public void valueChange(ValueChangeEvent event) {
        System.err.println(event.getNewValue());
      public String getCurrentValue() {
        return currentValue;
      public void setCurrentValue(String currentValue) {
        this.currentValue = currentValue;
    }And finally the definition in the faces-config:
       <component>
          <component-type>Test</component-type>
          <component-class>test.UITest</component-class>
       </component>
       <managed-bean>
        <managed-bean-name>TestBean</managed-bean-name>
        <managed-bean-class>test.TestBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>When included in the JSP and then clicked on the combobox, I get an ArrayIndexOutOfBoundsException.
    Can anyone give me a hint what the problem might be?
    Thanks in advance!

  • How to create a text Component With Certain Properties

    I need to create a text component with the following properties:
    Has Capability to be italic, right/left aligned, have different background / foreground colors, and most importantly, the ability to have a fixed width and a height that is set by the amount of text in it (ie line wrapping expands the field vertically).
    It should be a simple exercise, but I cannot seem to figure out how to do it.

    Here is the correct syntax :
    private static JEditorPane constructPane(String text, int normWidth, int normHeight, boolean rightAlign, boolean italic,boolean isWhite) {
              JEditorPane pane = new JEditorPane();
              pane.setEditable(false);
              pane.setContentType("text/html");
              pane.setText(
                   "<html><head></head><body>"
                   + (italic?"<i>":"")
                   + "<table><COLGROUP><COL width=\""+normWidth+"\"><THREAD><tr><td valign=\"top\" align="+(rightAlign?"\"right\"":"\"left\"")+">"
                   + text+"</td></tr></table>"
                   + (italic?"</i>":"")
                   + "</body></html>");
              pane.setSize(normWidth,normHeight);
              if(isWhite)
                   pane.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(1,0,1,0,Color.WHITE),BorderFactory.createEmptyBorder(0,1,0,1)));
                   pane.setForeground(Color.WHITE);
              else {
                   pane.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(1,0,1,0,Color.BLACK),BorderFactory.createEmptyBorder(0,1,0,1)));
                   pane.setForeground(Color.BLACK);
              return pane;
         }

  • Help with Custom Component: Ajax and ValueChangeListener

    Hello,
    I am trying to create a custom component that triggers an update via Ajax. However, I would also like to trigger a ValueChangeListener method from the same component, however I am unsure of how to obtain and trigger the ValueChangeEvent.
    The code I have so far in the Phase Listener is:
    private void handleAjaxRequest(PhaseEvent event) {
         FacesContext context = event.getFacesContext();
            HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
            Object object = context.getExternalContext().getRequest();
            if (!(object instanceof HttpServletRequest)) {
                return;
            HttpServletRequest request = (HttpServletRequest)object;
            HttpSession session =  request.getSession();
            String requestType = request.getParameter("jsflotRequestType");
            if (requestType != null && requestType.equalsIgnoreCase("jsflotchartValueChange")) {
                 //Trigger valueChangeEvents
                 log.info("Handling JSFlot Chart Value Change Event.");
    }What I am looking for though, is some information regarding how to obtain the ValueChangeListener from the request/session objects.
    The component tag is called like this:
    <jsflot:flotChart id="valueTimeChart"
         value="#{chartMbean.chartSeries}"
         valueChangeListener="#{chartMbean.valueChangeListener}"Any help would be greatly appreciated!

    The field calculation order was not in the correct order, had a devil of a time figuring out how to get to it, in Acrobat X.
    My check boxes for shipping have the same name field but I don't see a tab for export value for the check boxes, and I have no idea how to implement your suggestions for a switch or if statement or what fields to attach them to. 
    My amatuer attempt at a shipping formula follows, I don't know if I can use a range for event value, or where to put the script, if it is even correct.
    if(event.value == "<25.01")
        nShipFee = 06;
    else if(event.value == "25.01 - 75")
        nShipFee = 11.50;
    else if(event.value == "75.01 - 125")
        nShipFee = 15;
    else if(event.value == "125.01 - 200")
        nShipFee = 20;
    else if(event.value == "200.01 - 300")
        nShipFee = 25;
    else if(event.value == "300.01 - 400")
        nShipFee = 30;
    else if(event.value == ">400")
        nShipFee = 50;

  • How to create a custom component in Integrator

    Hi everybody, I'm trying to develop a custom componente for Endeca Integrator, following this guide:
    http://www.cloveretl.com/blog/creating-your-own-component-in-cloveretl-step-by-step/
    but, even if I installed Plug-in Development Environment (PDE), I can't see plug-in options in File->New->Others section, so I can't follow guide steps.
    Is there any problem with my configuration of Integrator? Why can't I see plug-in development/deployment options anywhere in Integrator?
    Is there eventually another way to implement a custom component in Integrator?
    Thanks for your replies!

    No, it doesn't. It's like PDE has never been installed, but I try to reinstall it through "Help"->"Install new software" I receive an error because the plug-in is installed.

  • How to build a tabular form with a by the user insertable primary key

    I have build a build a tabular form with the wizzard. Wat should I do to make the primary key insertable by the user.
    When I change the PK from 'hidden' to 'text field', I get a checksum error when i am trying to insert.

    Fred: When you use the tabular form wizard, notice the help text on the right hand side of each page. The help page where you define the type of primary key (Existing trigger, PL/SQL function, existing sequence) clearly states
    Tabular forms do not support user entered primary key values
    Makes sense when you think about it. The MRU process needs to determine whether to update a record or insert a new record. It does that by comparing the checksums (and/or) pk values from when the page was first rendered and then when you make changes and submit it. Newly inserted rows will have a blank PK/checksum.
    If you allow user to change the PK, how will the system know which rows are new and which ones are old?
    For example, lets say you have
    create table t
    pk int primary key,
    data varchar2(10)
    )You have 2 rows
    1 red
    2 yellow
    If the PK were to be editable, user could go in and change the above to
    2 red
    1 yellow
    Now what? Would you like the system to create a new row with 1/yellow or change the existing pk=1 row to yellow? Same with the other row.
    Bottom line: The built-in processes dont support this. You can always write your own manual tabular form and implement whatever you logic you wish in your After Submit processes.
    Hope this helps.

Maybe you are looking for