JSF 1.1 - How to get the ID attribute of h:selectB

2019-08-27 02:01发布

问题:

So, here is the jsf component:

<h:selectBooleanCheckbox id="cb#{index}" value="backingBean.value" />

And here is a part of the backing bean java:

/**
 * getValue is a method which checks if a checkbox is selected or not, using the checkbox ID
 */
public boolean getValue() { 
  //TODO: get the checkbox id
  String checkboxID = ??

  if (getCheckedIDs().contains(checkboxID)) {
    return true;
  }

  return false;
}

When the page is loading the checkboxes, I want to check this way if the checkbox is selected or not. So the question is, what to write instead of ?? to get the ID of the checkbox who called the method? It's very important that I can use only JSF 1.1, so there are many solutions which won't work with this version.

回答1:

EDIT: as @Kukeltje correctly notes, the main issue is that the value expression is incorrect. Once you change that, the below is applicable.

You don't need to "calculate" the value ("set" or "unset") of your checkbox. JSF will simply call backingbean.setValue(x) (with x being true or false) depending on whether the checkbox is on or off at that moment (i.e. when you submit the page).

This happens automatically because you said value="#{backingBean.value}".

So in setValue() you simply store the argument, in getValue you return the stored argument. The rest is done by JSF for you.

If you want the checkbox to be on by default, you set the stored value to true.

For example:

private boolean storedValue = true;  // or false if you want it to be off by default

public boolean getValue() {
  return storedValue;
}

public void setValue(boolean value) {
  this.storedValue = value;
}


标签: jsf jsf-1.1