0

もう一つ大きな問題があります。コンポーネント、ゾーン、およびゾーンをリフレッシュするフォームがあります。コンポーネントをループ内に配置すると、最後のゾーンのみが表示されます。ゾーンごとに一意の ID を生成しました。ページ ソースでは、すべてのゾーンが正しい ID を取得していることがわかりますが、送信時に正しく返されません。IDでゾーンを返す方法はありますか?

これが私のコードです:

<details>      
    <summary>Comments</summary><br />        
      <t:zone t:id="commentZone" id="prop:zoneId">                
                <t:commentlist materijalID="materijalID"></t:commentlist><br />  
    </t:zone>                
    <t:form t:id="komentar" t:context="materijalID" t:zone="prop:zoneId">
            <t:textarea t:value="comment" rows="6" cols="40"></t:textarea><br />
             <input type="submit" value="Add comment"/>
    </t:form>
</details>
public class Comments 
{   
    @Parameter(required=true) 
    @Property 
    private int materijalID; 

    @SessionState 
    @Property 
    private User user; 

    @Inject 
    private Session session; 

    @Property 
    private String comment; 

    @InjectComponent 
    private Zone commentZone; 


    @CommitAfter 
    public Object onSuccessFromKomentar(int materijalID) 
    {
        Komentar k = new Komentar(); 
        Date d = new Date(); 
        Materijal m = (Materijal)session
                .createCriteria(Materijal.class)
                .add(Restrictions.eq("materijalID", materijalID))
                .list()
                .get(0); 
        k.setMaterijal(m); 
        k.setKorisnikID(this.user.getID()); 
        k.setDatumUnosa(d); 
        k.setDatumModifikacije(d); 
        k.setKomentar(this.comment); 
        session.save(k); 
        this.comment = ""; 
        return this.commentZone.getBody(); 
    }

    public String getZoneId() 
    { 
        return "Zone_" + this.materijalID; 
    } 
} 

前もって感謝します

4

2 に答える 2

1

で設定t:defer="false"してみましたSubmitか?

ヘニングはここで同様の質問に答えます

于 2012-12-11T19:57:28.253 に答える
0

問題は、commentList に渡す materijalID が @Parameter として渡されるものと同じであることです。つまり、カプセル化コンポーネントがこの値を設定します。ループの場合、これはほとんどの場合、レンダリング フェーズの後の最後のループです。

解決策は、このパススルーを切り離すことにあります。次のようなもの:

<details>      
    <summary>Comments</summary><br />        
    <t:zone t:id="commentZone" id="prop:zoneId">                
        <t:commentlist materijalID="prop:passThroughMaterijalID"></t:commentlist>
        <br />  
    </t:zone>                
    <t:form t:id="komentar" t:context="materijalID" t:zone="prop:zoneId">
        <t:textarea t:value="comment" rows="6" cols="40"></t:textarea><br />
        <input type="submit" value="Add comment"/>
    </t:form>
</details>
public class Comments 
{   
    @Parameter(required=true) 
    @Property 
    private int materijalID; 

    @Property 
    private int passThroughMaterijalID; 

    @SessionState 
    @Property 
    private User user; 

    @Inject 
    private Session session; 

    @Property 
    private String comment; 

    @InjectComponent 
    private Zone commentZone; 

    @SetupRender
    private void setup() {
        this.passThroughMaterijalID = materijalID;
    }


    @CommitAfter 
    public Object onSuccessFromKomentar(int materijalID) 
    {   
        this.passThroughMaterijalID = materijalID;
        Komentar k = new Komentar(); 
        Date d = new Date(); 
        Materijal m = (Materijal)session
                .createCriteria(Materijal.class)
                .add(Restrictions.eq("materijalID", materijalID))
                .list()
                .get(0); 
        k.setMaterijal(m); 
        k.setKorisnikID(this.user.getID()); 
        k.setDatumUnosa(d); 
        k.setDatumModifikacije(d); 
        k.setKomentar(this.comment); 
        session.save(k); 
        this.comment = ""; 
        return this.commentZone.getBody(); 
    } 

    public String getZoneId() 
    { 
            return "Zone_" + this.materijalID; 
    } 
} 
于 2012-12-05T12:42:38.937 に答える