1

JSF を使用するのは今日で 2 日目です。Java のバックグラウンドはなく、かなり長い間 Flex と C++ を使用してきました。私がどこから来たのか誰もが知っているように、いくつかの歴史。「ラッシュ」プロジェクトの場合、問題が発生しています

<h:panelGroup id="txeTab" layout="block" class="txeTab">

        <h1>TXE</h1>
        <h:form id="txeForm">
            <h:panelGrid columns="3">
                <c:forEach  items="${txeConfBean.getListTable()}" var="property">
                    <h:outputLabel id="key" value="${property.key}"/>
                    <h:inputText  id="value" value="${property.value}" />
                    <h:commandButton value="Change" action='${txeConfBean.setProperty('key','value')}'/>
                </c:forEach>
            </h:panelGrid>
        </h:form>   
    </h:panelGroup>

Beanは次のとおりです

public  HashMap <String,String> getListTable ()
{
    String[] keys = new String[super.keyData.size()];
    HashMap <String,String> retKeys = new HashMap <String, String>();
    super.keyData.toArray(keys);

    for (int i=0;i<keys.length;i++)
    {
        if(!keys[i].isEmpty())
        {
            retKeys.put(keys[i],getProperty(keys[i]));
        }
    }

    return retKeys;

}

キーと値のペアを再帰的に表示できません。しかし、誰かが更新したら、特定のキーを新しい値で更新しh:inputText id="value" value="${property.value}" />、新しい値が書き込まれるコマンドボタンを押したいと思います。この点で助けが必要です。それをグーグルで検索すると、それを行う方法が多すぎると感じます。助けが必要。${txeConfBean.setProperty('key','value')}InputText と OutPutText の両方の値を setPropertyに渡すにはどうすればよいですか?

4

1 に答える 1

5

従来の${}JSP から継承された は、プロパティに対して「設定」操作を実行できません。プロパティに対して「取得」操作のみを実行できます。

プロパティで「get」と「set」の両方をサポートする場合は、#{}. さらに、一般的に JSF では、もう使用しない${}でください。さらに、入力コンポーネントによってマップ値を取得/設定するには、中括弧表記 as を使用してキーでマップ値を参照する必要があります#{bean.map[key]}

<h:form id="txeForm">
    <h:panelGrid columns="3">
        <c:forEach items="#{txeConfBean.listTable}" var="property">
            <h:outputLabel id="key" value="#{property.key}"/>
            <h:inputText id="value" value="#{txeConfBean.listTable[property.key]}" />
            <h:commandButton value="Change" />
        </c:forEach>
    </h:panelGrid>
</h:form>   

コマンド ボタン アクションは省略されていることに注意してください。put()JSF/EL は、モデル値が更新されようとしているときに、マップのメソッドを「自動的に」呼び出します。この特定の構成では不要です。また、この構成では、フォーム全体が送信されることに注意してください。コマンド ボタンをテーブルの外に配置するか<f:ajax>、現在の「行」のみを送信するために使用することができます。

以下も参照してください。


具体的な問題とは関係ありません: getter メソッドでビジネス ジョブを実行しています。これは、反復コンポーネントでプロパティが参照される場合、非常に非効率的です。代わりに (ポスト) コンストラクターでビジネス ジョブを実行します。一度だけ呼び出されます。このようにして、ゲッターを本当に完全なゲッターにすることができます。

public HashMap<String,String> getListTable() {
    return listTable;
}

以下も参照してください。

于 2012-11-22T13:25:45.260 に答える