This week's book giveaway is in the JavaFX forum.
We're giving away four copies of Introducing JavaFX 8 Programming and have Herbert Schildt on-line!
See this thread for details.
The moose likes JSF and the fly likes access ui components in custom valuechangelistener Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Introducing JavaFX 8 Programming this week in the JavaFX forum!
JavaRanch » Java Forums » Java » JSF
Bookmark "access ui components in custom valuechangelistener" Watch "access ui components in custom valuechangelistener" New topic
Author

access ui components in custom valuechangelistener

prashanth talkad
Greenhorn

Joined: Nov 16, 2010
Posts: 4
hi, working with jsf 1.2 n am trying to dynamically construct a group of radiobuttongroups inside an htmlgrid - so my valuechangelistener is not specified in the jsp component. my code is below

firstly i have a custom listener which I initialize as -
CustomRadioButtonValueChangeListener listener = new CustomRadioButtonValueChangeListener();

then, my java bean code has -

for(Declarations decl : (List<Declarations>)declarationsList){
Label label = new Label();
label.setId(decl.getCode() + "label");
label.setText(decl.getDescription());
label.setStyleClass("formButtonGroupListItemLabel1");

RadioButtonGroup rbg = getRadioButtonGroup();
rbg.setValue(NO);
rbg.setId((String)decl.getCode());//rbg.setLabel("Yes");
rbg.setOnChange("setModified();submit();");
rbg.addValueChangeListener(listener);

TextArea tArea = new TextArea();
tArea.setId(decl.getCode() + "TextArea");
tArea.setRows(5);
tArea.setColumns(100);
tArea.setText("");
tArea.setRequired(true);
//tArea.setDisabled(true);
declarationDetailsPanel.getChildren().add(label);
declarationDetailsPanel.getChildren().add(rbg);
declarationDetailsPanel.getChildren().add(tArea);
}

Now, what I want to do is, on click of a radio button, I want to enable/disable the corersponding textarea's.

In the custom listener I'm unable to get hold of the TextArea object that I want to control.
I tried FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(event.getComponent().getId + "TextArea"); //this should translate to "Declaration1TextArea" for the first radio button group and so on....

Can anyone help or give ideas on how to access the UI Components in this listener class.

cheers
p
Tim Holloway
Saloon Keeper

Joined: Jun 25, 2001
Posts: 17143
    
  27

Any time you resort to javax.faces classes for anything other than datamodels, there's a strong possibility you're doing things the hard way.

I'm going to assume that you want partial page updating where the radio button enables/disables the textarea without actually re-rendering the entire page.

To do that, however, you need AJAX, since the default (non-AJAX) behavior is that the entire form would be submitted and the entire page would be redrawn. Plus, to make a radio button submit at all, it has to have attached JavaScript code, since a radio button isn't a submit button.

Which AJAX framework you use it up to you. Here's how it would look in RichFaces, however (more or less).


The client-side code looks like this:


Note the complete absence of JSF-specific code. It's all done with POJO stuff.

Note also, however, that this particular example doesn't do the full enable/disable, but that's because of UI concerns. A Radio button isn't a boolean control, so you can't click-on/click-off. For that you should use a checkbox. You can have 2 radio buttons and enable/disable based on which one of them is clicked, however.


An IDE is no substitute for an Intelligent Developer.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: access ui components in custom valuechangelistener
 
It's not a secret anymore!