2013-06-12 74 views
0

我试图从p:galleria组件内部进行命令链接时遇到问题 尽管事实上在运行时链接值为value="Show present #{present.name} #{present.presentId}"包含正确的值的id作为示例value="Show present Foo 1",按命令链路时,它发送第二个对象的每个时间PrimeFaces <f:属性与p:galleria属性无法正常工作

<h:form> 
    <p:galleria value="#{presentBean.allPresentList}" var="present" panelWidth="500" panelHeight="313" showCaption="true"> 
     <f:facet name="content"> 
      <h:commandLink value="Show present #{present.name} #{present.presentId}"     action="pretty:present" actionListener="#{presentBean.setPresentObj}"> 
       <f:attribute name="present" value="#{present.presentId}"/> 
       </h:commandLink> 
     </f:facet> 
    </p:galleria> 
</h:form> 

@ManagedBean(name="presentBean") 
@SessionScoped 
public class PresentBean implements Serializable{ 

    ArrayList<Present> allUserPresentList = new ArrayList<Present>(); 

    @PostConstruct 
    private void usersPresent(){ 
     PresentDao presentDao = new PresentDaoImpl(); 
     allPresentList = (ArrayList<Present>) presentDao.findAllPresents(); 
    } 

    public ArrayList<Present> getAllUserPresentList() { 
     return allUserPresentList; 
    } 

    public void setAllUserPresentList(ArrayList<Present> allUserPresentList) { 
     this.allUserPresentList = allUserPresentList; 
    } 

    private String presentId ; 

    public String getPresentId() { 
     return presentId; 
    } 

    public void setPresentId(String presentId) { 
     this.presentId = presentId; 
    } 

    public void setPresentObj(ActionEvent ev){ 
     Object presentOb = ev.getComponent().getAttributes().get("present"); 
     if(presentOb != null){ 
      this.presentId = (String) presentOb; 
     }else{ 
      presentId = null ; 
     } 
    } 
} 
+0

请提供您的托管bean代码 – zargarf

+0

感谢@zargarf您的回复,当调试方法“setPresentObj”的值是固定的,不要改变图库中显示的图像 – user1021743

回答

1

您需要使用一个setPropertyActionListener代替<f:attribute name="present" value="#{present.presentId}"/>的F错误ID:属性标记仅被评估当组分被创建(只有一次),而不是当组件根据迭代的行生成html时。

所以你需要改用:

<f:setPropertyActionListener target="#{presentBean.presentId}" value="#{present.presentId}" /> 

这将设置presentId的价值在你的托管bean,所以在你的操作方法你可以访问presentId本身就已经不必工作出来。

或者,如果您使用JSF的更高版本(使用的Servlet 3.0或以上),则可以创建在托管bean它接受presentId或甚至本对象作为参数

例如一个方法在您的托管bean:

public void myAction(Present p){ 
     //do whatever you want with the Present object 
    } 

,并在您.xhtml:

<h:commandLink value="Show present #{present.name} #{present.presentId}"   actionListener="#{presentBean.myAction(present)}"> 
</h:commandLink> 
+0

谢谢你的帮助,但是我觉得我已经达到了死胡同,因为即使当我使用 user1021743

相关问题