まず第一に、私は JSF の初心者であると言いたいです。
記事の編集に使用できる単純な複合コンポーネントを作成したいと考えています。次のように動作するはずです。
- 複合部品はこんな感じ
<my:article article="#{interestedBean.article}" />
ArticleBean
複合コンポーネントのデータ処理を担当します(ここではsave
メソッドです)Article
アーティクルを使用する各ページでは、複合コンポーネントをビューに追加し、オブジェクトをバッキング Beanに追加する必要があります。Article
オブジェクトが複合コンポーネントに渡され、その値が変更されますArticleBean
Article
問題は、エンティティ (オブジェクト) をある Bean (関心のある Bean) から別の ( ArticleBean
) にビューを介して渡す方法がわからないことです。
例 (疑似コード; Article エンティティが単純な String オブジェクトであるため、コンバーターを使用する必要がないことを想像してみましょう):
// input bean
public class HomePageBean {
private Article article;
@PostConstruct
public void init() {
this.article = new Article();
this.article.setText("welcome on home page");
}
public void setArticle(Article article) {
this.article = article;
}
public Article article() {
return article; // on real page article will be taken from database
}
}
// view
<h:form>
<h:outputText value="#{articleBean.article.text}">
<f:attribute name="value" value="#{homePageBean.article.text}" />
</h:outputText>
</h:form>
// output bean
public class ArticleBean {
private Article article;
public void setArticle(Article article) {
this.article = article;
}
public Article getArticle() {
return article;
}
public void save() {
// save article data to database
}
}
// entity
public class Article {
private article text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
問題は、SecondBean.entity.text
値が設定されていないことです。ビューからバッキング Bean にパラメーターを渡すにはどうすればよいですか? Article
を使用して値を設定しようとしていまし@ManagedProperty(value="#{param.article}")
た<h:outputText>
が、形式が整っているため、値は として渡されrandomformname:article
ます。
私の英語でごめんなさい