1

私は現在、Apache Tapestry 5.3.6 を使用していくつかのプロジェクトに取り組んでいます。t:loop コンポーネントの使用に問題があります。ループが終了し、ページがレンダリングされた後に選択したアイテムを取得する方法はありますか? 私が達成する必要があるのは、次のようなループがあるとしましょう:

<t:loop t:source="itemList" t:value="item">
    <t:actionlink id="something" context="item.ID"></t:actionlink>
</t:loop>

これはうまくいきます。しかし、この actionlink を自分のコンポーネントに移動し、この ID をパラメーターを介して渡すと、クリックすると、クリックされたアイテムではなく、リストから常に最後のアイテムが取得されます。

<t:loop t:source="itemList" t:value="item">
    <t:mycomponent myparameter="item.ID"></t:mycomponent>
</t:loop>

formState="iteration" を入れて、ValueEncoder を入れてみましたが、何も役に立ちません。この問題を解決し、リストから選択したアイテムを取得する方法を教えてください。前もって感謝します

編集:これが私のコンポーネントのコードです

public class Ocenjivanje 
{   
    @Parameter(required=true) 
    @Property 
    private int materijalID; 

    private Materijal materijal; 

    @Inject 
    private Session session; 

    @SessionState 
    private User user; 

    @CommitAfter 
    public Object unesiOcenu(int ocena) 
    { 
            Materijal m = (Materijal)session.createCriteria(Materijal.class).add(Restrictions.eq("materijalID", this.materijalID)).list().get(0); 
            Date d = new Date(); 
            Ocena o = new Ocena(); 
            o.setMaterijal(m); 
            o.setKorisnikID(this.user.getID()); 
            o.setDatumOcene(d); 
            o.setOcena(ocena); 
            session.save(o); 
            return this; 
    } 

    public void onActionFromJedan() 
    { 
            unesiOcenu(1); 
    } 

    public void onActionFromDva() 
    { 
            unesiOcenu(2); 
    } 

    public void onActionFromTri() 
    { 
            unesiOcenu(3); 
    } 

    public void onActionFromCetiri() 
    { 
            unesiOcenu(4); 
    } 

    public void onActionFromPet() 
    { 
            unesiOcenu(5); 
    }   
} 

<t:container 
      xmlns="http://www.w3.org/1999/xhtml"
  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
  xmlns:p="tapestry:parameter">

  Oceni sadržaj:                 
            <t:actionlink t:id="jedan">1</t:actionlink>
            <t:actionlink t:id="dva">2</t:actionlink>
            <t:actionlink t:id="tri">3</t:actionlink>
            <t:actionlink t:id="cetiri">4</t:actionlink>
            <t:actionlink t:id="pet">5</t:actionlink>        

4

1 に答える 1

0

あなたが達成しようとしていることはよくわかりませんが、いずれにせよ、アクションリンクで渡すコンテキストを使用せず、代わりにハードコードされた int を使用します。アクション リンクを<t:actionlink t:id="tri" context="materijalID">3</t:actionlink>に変更し、イベント ハンドラを に変更します。

public void onActionFromJedan(int context) 
    { 
            unesiOcenu(context); 
    }
于 2012-12-03T15:36:53.953 に答える