5

JSFマネージドBeanにプロパティを設定するためのコードを探しています。私の最初のアイデアはそのようなものでした:

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

つまり、ボタンをクリックせずに属性deviceを値に設定したいということです。"mobil"

4

4 に答える 4

10

はい、この目的でc:setを使用できます。

<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

ただし、静的な値を設定することはほとんど意味がありません。管理対象Beanクラスに直接デフォルト値を設定することを検討してください。また、ビュー層よりもJavaコードで定数をより適切に処理できるため、保守性の観点からも。

于 2012-08-07T11:39:35.690 に答える
2

JSFタグの子タグsetPropertyActionListenerが必要だと思います。これは、任意のActionComponentで子タグとして設定できます。

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

アップデート:

私はもともとユーザーの問題を誤解していました。彼らはページを持っており、ページの読み込み時にプロパティを設定する必要があります。これを行うにはいくつかの方法がありますが、どちらも少し異なります。ポストバックのたびにプロパティを値に設定する場合は、ManagedBeanメソッドで@PostConstructアノテーションを使用できます。

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

これで、ページの読み込み時にデフォルト値で1回だけ初期化する必要があるViewScopedまたはSessionScope Beanがある場合、ポストバックのたびに実行されるフェーズライフサイクルイベントを設定して、ページを初期化する必要があるかどうかを確認できます。 。

mah.xhmtl:

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

LoginBean:

public void initialize() {
  if (this.device == null)
    this.device = "mobil";
}
于 2012-08-07T11:26:44.043 に答える
0

コメントできません:ロード時にページで値を準備する必要がある場合は、Managed Beanを使用して値を直接初期化するか、コンストラクターまたは@PostConstructを使用して同じことを行うことができます。

     @ManagedBean
     @ResquestScoped
     public class LoginBean {
          private String device = "some value";
          //Using Constructor
          public LoginBean() {
               device = getvalueFromSomewhere();
          }

          //Using PostConstruct
          @PostConstruct
          public void init() {
               device = getvalueFromSomewhere();
          }

     }
于 2012-08-07T11:47:44.173 に答える
0

xhtmlファイルに値を設定する代わりに、別のManagedBeanを介して設定できます。たとえば、page1.xhtmlを管理するmanagedBean1とpage2.xhtmlを管理するmanagedBean2があるとします。page1.xhtmlにpage2.xhtmlが含まれている場合:

<ui:include src="page2.xhtml"/>

managedBean1では、上部に配置できます

@ManagedProperty(value = "#{managedBean2}")
private ManagedBean2 managedBean2;

とPostConstructで

@PostConstruct
public void construct() {
    managedBean2.setProperty(...);
}

とにかく私のために働いた...

于 2016-04-12T08:54:10.057 に答える