Tapestry,从循环中获取所选项目

时间:2012-12-03 12:48:29

标签: java apache loops tapestry

我目前正在使用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>        

1 个答案:

答案 0 :(得分:0)

我不太确定你想要实现的目标但是在任何情况下你都不会使用你在动作链接中传递的上下文并使用硬编码的int来代替。将您的操作链接更改为<t:actionlink t:id="tri" context="materijalID">3</t:actionlink>,并将您的事件处理程序更改为

public void onActionFromJedan(int context) 
    { 
            unesiOcenu(context); 
    }