c:set for bean properties

21,313

Solution 1

Yes, you can use c:set for this purpose.

<c:set value="mobil" target="#{loginBean}" property="device" />

Doc: http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/c/set.html

However, setting a static value rarely makes sense. You might consider to set a default value directly in your managed bean class. Also in terms of maintainability since you can handle constants better in the Java code than in the view layer.

Solution 2

I think you want the JSF tag child tag setPropertyActionListener. You can set this as a child tag in any ActionComponent.

<h:anyActionComponent id="component1">
  <f:setPropertyActionListener target="#{loginBean.device}" value="mobil" />
</h:anyActionComponent>

UPDATE:

I originally misunderstood the users problem. They have a page, and they want a property to be set when the page loads. There is a couple ways to do this, but both are a little different. If you want to set a property to a value after every postback then you can use the @PostConstruct annotation on a ManagedBean method.

@PostConstruct
public void initializeStuff() {
  this.device = "mobil";
}

Now if I have a ViewScoped or SessionScope bean that needs to be initialized with a default value just once when the page loads then you can set a phase lifecycle event that will run after every postback and check to see if the page should be initialized or not.

mah.xhmtl:

<f:event listener="#{loginBean.initialize()}" type="preRenderView" />

LoginBean:

public void initialize() {
  if (this.device == null)
    this.device = "mobil";
}
Share:
21,313
DominikAngerer
Author by

DominikAngerer

I'm Dominik Angerer, a full-stack developer from Austria went CEO &amp; Founder at @storyblok. Co-Organizer of a meet-up called @stahlstadtjs and conferences such as @scriptconf and TSConf:EU.

Updated on April 12, 2020

Comments

  • DominikAngerer
    DominikAngerer about 4 years

    I'm looking for some piece of code for setting a property in a JSF managed bean. My first idea was something like that:

    <c:set var="#{loginBean.device}" value="mobil"></c:set>
    

    That means I want to set the attribute device to the value "mobil" without a button have to been clicked.