0

こんにちは、私はこのシナリオを持っています:

私はprimefacesデータテーブルを使用してp:datatableおり、マネージドBeanからリストを受け取ります...このサンプルを探してください:そしてヘッダー「ステータス」に注意してください

<p:datatable styleClass="table1" id="listTable" var="t" value="{testBean.elements}">
    <p:column headerText="Request No.">
       <h:outputText value="#{t.part_request_no}"></h:outputText>
    </p:column>
    <p:column headerText="Request No.">
       <h:outputText value="#{t.part_request_date}"></h:outputText>
    </p:column>
    <!--please pay attention here -->
    <p:column headerText="status">
        <h:outputText value="#{t.part_status}"></h:outputText>
    </p:column>
</p:datatable>

結果は次のようになります:

Request No.  | Request Date | Status |
    1        |   2013-02-02 |   1    |
    2        |   2013-01-01 |   2    |
    3        |  2013-4-23   |   5    |

私の質問は : 1、2、5 を表すのは恥ずかしいことです。だから私は次のようなステータスを表示することを好みます

  • 1 : 新規
  • 2 : 却下
  • 5 : キャンセルされました。

私がこのようになるために必要な結果

Request No.  | Request Date | Status   |
    1        |   2013-02-02 |   New    |
    2        |   2013-01-01 | Rejected |
    3        |   2013-4-23  | Canceled |

何か案は ????ありがとうございました ....

4

2 に答える 2

2

ステータス コードと関連する説明の間のマッピングを維持する方法と場所に応じて、いくつかの方法があります。

  1. ビューでハードコードされています。

    <h:outputText value="New" rendered="#{t.part_status == 1}" />
    <h:outputText value="Rejected" rendered="#{t.part_status == 2}" />
    <h:outputText value="Cancelled" rendered="#{t.part_status == 5}" />
    

  2. マップにハードコードされています。

    @ManagedBean
    @ApplicationScoped
    public class Data {
    
        private static final Map<Long, String> STATUSES = createStatuses();
    
        private static Map<Long, String> createStatuses() {
            Map<Long, String> statuses = new HashMap<Long, String>();
            statuses.put(1L, "New");
            statuses.put(2L, "Rejected");
            statuses.put(5L, "Cancelled");
            return Collections.unmodifiableMap(statuses);
        }
    
        public Map<Long, String> getStatuses() {
            return STATUSES;
        }
    
    }
    

    <h:outputText value="#{data.statuses[t.part_status]}" />
    

  3. ロークレイズされたリソース バンドル ファイルで定義されます。

    status.1 = New
    status.2 = Rejected
    status.5 = Cancelled
    

    <f:loadBundle basename="com.example.i18n.text" var="text" />
    ...
    <c:set var="statusKey" value="status.#{t.part_status}" />
    <h:outputText value="#{text[statusKey]}" />
    

  4. 列挙型で定義されます。

    public enum Status {
    
        New(1), Rejected(2), Cancelled(5);
    
        private int code;
    
        private Status(int code) {
            this.code = code;
        }
    
        public static Status of(int code) {
            for (Status status : values()) {
                if (status.code == code) {
                    return status;
                }
            }
            throw new IllegalArgumentException();
        }
    
        public int getCode() { 
            return code;
        }
    
    }
    

    モデルの作成中

    t.setPart_status(Status.of(statusCode));
    

    そして、ちょうどビューで

    <h:outputText value="#{t.part_status}" />
    

組み合わせもできます。たとえば、列挙型の i18n ラベル。


具体的な問題とは関係ありませんが、私はあなたのJava 命名規則に取り組みたいと思います。part_statusは有効なプロパティ名ではありません。である必要がありますpartStatus

于 2013-03-20T13:58:03.213 に答える
0

ManagedBean にメソッドを作成して、必要なラベルに変換してみませんか?

<p:column headerText="status">
    <h:outputText value="#{testBean.getStatusLabel(t.part_status)}"/>
</p:column>

そして ManagedBean で:

public String getStatusLabel(int code){
    // Do your thing here...
}
于 2013-03-20T12:09:43.780 に答える