1

データテーブルからバッキングBeanに単一の値を渡すのに問題があります。確認ダイアログのメソッドで印刷しようとすると、常に値0が返されますが、コマンドボタンのメソッドで印刷しようとすると、必要な値が表示されます。値などをリセットすると思います。

<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>

Bean(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);
}
4

1 に答える 1

1

あなたがしなければならない最初のそして最も重要な変更は次のとおりです:RequestScoped->ViewScopedLuiggiMendoza提案したように。processので属性を追加p:commandButtonする必要がある場合がありidますp:dataTable。また、 as:を使用せずに、オブジェクトをメソッドにlab直接渡すこともできます。どうして!actionf:setPropertyActionListeneraction="#{coltsysHome.action(lab)}"public String action(Lab lab)actionListener

于 2013-03-11T06:12:44.523 に答える