Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c:set for bean properties

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.

like image 312
DominikAngerer Avatar asked Aug 07 '12 11:08

DominikAngerer


People also ask

What is c set in Jstl?

3.2. The <c:set> tag is used for declaring scoped variables in JSP. We can also declare the name of the variable and its value in the var and value attributes respectively. An example will be of the form: <c:set value="JSTL Core Tags Example" var="pageTitle"/>

How you can set Javabean value?

The standard way to set JavaBeans component properties in a JSP page is by using the jsp:setProperty element. The syntax of the jsp:setProperty element depends on the source of the property value.


2 Answers

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.

like image 154
Ingo Avatar answered Oct 04 '22 00:10

Ingo


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";
}
like image 39
maple_shaft Avatar answered Oct 04 '22 00:10

maple_shaft