如何选择JSF Bean Scope使用对话框在一个页面上传输数据?

时间:2010-10-05 07:48:31

标签: java jsf

我在一个页面上有一个beancope的问题 我知道如果我想在一个页面中重新显示我可以使用viewcope但现在我想从一个页面中的对话框到对话框获取值格式数据表传递并使用sessionscope。 我可以得到这个值但是第一个选择值不显示,我必须按f5(刷新)页面显示值,我知道它意味着会话范围数据从一个页面传递到另一个页面但现在我想要传递数据1页面抛出对话框 我用户的Primepface对话框 我该怎么做? 这意味着当我点击图像对话框一个显示数据表列表时,当我点击编辑按钮时,它调用对话框两个显示详细信息列表之一(对象的详细实例)。我可以这样做,但我必须刷新页面(重新加载页面)我该怎么做,不刷新页面?

我想使用SessionScoped,我希望id从对话框传递到对话框,并且不希望刷新页面用于会话作用域维护数据我该怎么办?

我的代码 JSF

<p:dialog header="Category" widgetVar="cate" width="600">
    <f:view>
        <h:form>
            <p:dataTable value="#{catController.allCate}" var="item" paginator="true" rows="10"
                         paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} ">
              <p:column>
                    <f:facet name="header">
                        <h:outputText value="Category name"/>
                    </f:facet>
                    <h:outputText value="#{item.cateName}"/>
                </p:column>
                <p:column style="width: 10px">
                    <f:facet name="header">
                        <h:outputText value=""/>
                    </f:facet>
                    <p:commandButton action="#{catController.showDetails(item)}"  onclick="editcate.show()" style="cursor: pointer;width: 10px; height: 15px;" image="edit"/>
                </p:column>
            </p:dataTable>
        </h:form>
    </f:view>

</p:dialog>







    <p:dialog header="Edit category" widgetVar="editcate" height="130" width="300">
    <f:view>
        <h:form>

            <h:panelGrid columns="2">
                <h:outputLabel value="" for="cateId" />
                <h:inputHidden id="cateId" value="#{catController.details.cateId}" />
                <h:outputLabel value="Category Name" for="cateName" />
                <h:inputText id="cateName" value="#{catController.details.cateName}" title="CateName" required="true" requiredMessage="The CateName field is required."/>
            </h:panelGrid>
        </h:form>
    </f:view>


</p:dialog>

和我的支持豆

package com.mcgraw.controller;

import com.DAO.CategoryDAO;
import com.entity.Category;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


/**
 *
 * @author Kency
 */
@ManagedBean
@SessionScoped
public class CatController implements Serializable{
    @EJB
    private CategoryDAO categoryDAO;
    private Category cate;







    /** Creates a new instance of CatController */
    public CatController() {
        cate = new Category();
    }


     public Category getCate() {
        return cate;
    }

    public void setCate(Category cate) {
        this.cate = cate;
    }


    // lay toan bo danh sach category
    public List<Category> getAllCate(){
        return categoryDAO.retrieveAllCat();
    }

    public void showDetails(Category cat){
        this.cate = cat;


    }
    //tra ve thong tin chi tiet cua 1 category
    public Category getDetails(){
        //return categoryDAO.findByCatID(cate.getCateId());
        return cate;
    }




}

1 个答案:

答案 0 :(得分:0)

您使用@ViewScoped和reRender(更新)对话框。

<p:commandButton update="dialog" action="#{catController.showDetails(item)}"  onclick="editcate.show()" style="cursor: pointer;width: 10px; height: 15px;" image="edit"/>

并将id添加到对话框中:

<p:dialog id="dialog" >
   ...
  </p:dialog>