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>

这将正常工作。但是,如果我将此操作链接移动到我自己的组件中,并通过我的参数传递此 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 回答