SE成長痛日記

アラサーSEが技術力を高めるために日々感じる痛みを綴るBlogです。

JSFにマネージドビーンを追加する その3

前回作成したやつは、投稿ボタンを押下する度に、 文字列を付け足していくものでしたが、

見た目が悪いので、繰り返し構造を持つものに 修正したいと思います。

まず、情報の保持形式をまとも(投稿オブジェクトを作成、リストで保持するように変更)にします。

public class Response implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String _name;
    private String _mail;
    private String _body;

こんな感じの投稿クラスを作成し、

    private String responseList;
    private final List<Response> _responseList = new ArrayList<>();
    
    public void tweetResponse(){
        this.responseList += this.name + this.EMail + this.Res;
        this._responseList.add(new Response(this.name,this.EMail,this.Res));
        return;
    }

投稿ボタンがクリックされるたびに生成、リストに追加されるようにします。

次に、リスト内を繰り返して、 データを取得、表示するように変更します。

リストから要素を取得し、繰り返しHTMLを生成したいです。 ちょっと調べるとui:repeatってのがあるのでそれを使用してみます。

        <h:outputText value="#{responseBean.responseList}"></h:outputText>
        <ui:repeat var="res" value="#{responseBean.responseList}" >
            <h:outputText value="#{res.name}"/>
            <h:outputText value="#{res.mail}"/>
            <h:outputText value="#{res.body}"/>
        </ui:repeat>

こんな感じですかね?

とりあえず実行します。

f:id:hirohisoEx:20190303214924p:plain
エラー

そーですか・・・ あ、もともとも作成していたString型のプロパティを要素に指定してしまってました。

f:id:hirohisoEx:20190303220423p:plain
エラー2
そしてまたエラーorz

あれ、これui:repeatのvarもnameアノテーションで指定させて一致させないとだめなやつ? とりあえず修正したみたらうごきました 。。。。。。

f:id:hirohisoEx:20190303220857p:plain
動作した

でもどこにも、varはnameアノテーションのやつ指定しないとダメなんて、記載ないんだが・・・・

要調査です。

3/4追記 再度確認したら発生しなくなりました。謎・・・・