2013-03-11 61 views
1

我在将数据表中的单个值传递给支持bean时遇到了问题。当我尝试在确认对话框中的方法中打印它时,我总是得到0的值,但是当我尝试在命令按钮中的方法中打印它时,它显示我需要的值。我认为它重置了价值或任何东西。使用确认对话框将数据表中的值传递给bean JSF

<p:dataTable id="labLists" var="lab" value="#{coltsysHome.laboratory}" > 
    ..... 
    <p:column headerText=" "> 
     <p:commandButton value="DELETE" onclick="confDlg.show()" icon="ui-icon-closethick" action="#{coltsysHome.action}"> 
       <f:setPropertyActionListener value="#{lab.lab_id}" target="#{coltsysHome.lab_id_del}" /> 
     </p:commandButton> 
    </p:column> 

对于确认对话框:

<p:confirmDialog widgetVar="confDlg" header="DELETE LABORATORY" message="Are you sure you want to delete this lab?"> 
    <h:form id="delDlgForm"> 
      <p:commandButton id="confirm" value="Yes Sure" oncomplete="confDlg.hide()" actionListener="#{coltsysHome.deleteLab(event)}"/> 
      <p:commandButton id="decline" value="Not Yet" onclick="confDlg.hide()" type="button" /> 

    </h:form> 

豆(RequestScoped):

...getter and setter (lab_id_del) 

public void deleteLab(ActionEvent event) { 

    FacesContext context = FacesContext.getCurrentInstance(); 
    String cpath = context.getExternalContext().getRequestContextPath(); 

    try (Connection conn = dataSource.getConnection()) { 
     ColtsysDAO coltsysDAO = new ColtsysDAO(conn); 
     coltsysDAO.deleteLab(lab_id_del, coltsysDAO.getUserID(getUser_name())); 

    } catch (Exception e) { 
     e.printStackTrace(System.err); 
    } 
} 
public void action() { 
    System.out.println("lab_id_del: " + lab_id_del); 
} 
+0

什么是您使用的bean范围? – Andre 2013-03-11 01:28:02

+0

@Andre是在问题中发布的'@ RequestScoped'。 – 2013-03-11 04:36:24

+0

尝试将bean更改为'@ ViewScoped'或更广的范围。 – 2013-03-11 04:37:21

回答

1

你需要做的第一件,也是最重要的变化是:RequestScoped->ViewScopedLuiggi Mendoza有建议。您可能需要将process属性添加到p:commandButton,的p:dataTable。也可以将lab对象直接传递给action方法,而不使用f:setPropertyActionListener作为:action="#{coltsysHome.action(lab)}",并将其作为:public String action(Lab lab)。为什么不是actionListener

+0

太棒了!我会用这些 – Francis 2013-03-11 10:04:45

相关问题