JSFマネージドBeanにプロパティを設定するためのコードを探しています。私の最初のアイデアはそのようなものでした:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
つまり、ボタンをクリックせずに属性device
を値に設定したいということです。"mobil"
JSFマネージドBeanにプロパティを設定するためのコードを探しています。私の最初のアイデアはそのようなものでした:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
つまり、ボタンをクリックせずに属性device
を値に設定したいということです。"mobil"
はい、この目的でc:setを使用できます。
<c:set value="mobil" target="#{loginBean}" property="device" />
ただし、静的な値を設定することはほとんど意味がありません。管理対象Beanクラスに直接デフォルト値を設定することを検討してください。また、ビュー層よりもJavaコードで定数をより適切に処理できるため、保守性の観点からも。
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";
}
コメントできません:ロード時にページで値を準備する必要がある場合は、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();
}
}
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(...);
}
とにかく私のために働いた...