2014-01-24 64 views
0

我想自動設置根模塊視圖爲true,如果選擇了子模塊,任何人都可以幫助我,請檢查我附帶的JSF和Managed Bean代碼。設置父數據值設置真如果選擇了子選項

JSF代碼

<p:dialog widgetVar="assignPermission" id="assignPermissionDlgId"> 
    <p:panel> 
     <h:form id="form"> 
      <p:dataTable value="#{roleModule.modulesList}" var="modules" 
         id="tableId"> 
       <p:column headerText="Root Module ID:"> 
        <h:outputText value="#{modules.moduleID}" /> 
       </p:column> 
       <p:column headerText="Module ID:"> 
        <h:outputText value="#{modules.rootID}" /> 
       </p:column> 
       <p:column headerText="Module Description:"> 
        <h:outputText value="#{modules.moduleDescription}" /> 
       </p:column> 
       <p:column headerText="View"> 
        <h:selectBooleanCheckbox id="view" value="#{modules.view}" /> 
       </p:column> 
       <p:column headerText="Create"> 
        <h:selectBooleanCheckbox id="create" value="#{modules.create}" /> 
       </p:column> 
       <p:column headerText="Edit"> 
        <h:selectBooleanCheckbox id="edit" value="#{modules.edit}" /> 
       </p:column> 
       <p:column headerText="Delete"> 
        <h:selectBooleanCheckbox id="delete" value="#{modules.delete}" /> 
       </p:column> 
      </p:dataTable> 

      <p:toolbar> 
       <p:toolbarGroup> 
        <p:commandButton value="Submit" update=":data" 
            action="#{roleModule.confirmMethod}" > 
         <p:confirm header="Confirmation" message="Are you sure?" 
            icon="ui-icon-alert" /> 
        </p:commandButton> 
       </p:toolbarGroup> 
      </p:toolbar> 
      <p:confirmDialog global="true" showEffect="fade" 
          hideEffect="explode"> 
       <p:commandButton value="Yes" type="button" 
           styleClass="ui-confirmdialog-yes" icon="ui-icon-check" /> 
       <p:commandButton value="No" type="button" 
           styleClass="ui-confirmdialog-no" icon="ui-icon-close" /> 
      </p:confirmDialog> 
     </h:form> 
    </p:panel> 
</p:dialog> 

ManagedBean

public void confirmMethod() 
    { 
     System.out.println(modulesList.size()); 

     PreparedStatement pst = null; 
     Connection con = getConnection(); 
//  System.out.println("value check"+applicationShort); 
     String insert="INSERT INTO role_module_mapping VALUES(?,?,?,?,?,?)"; 


     for(Module list : modulesList) 
     { 
      try { 
       pst=con.prepareStatement(insert); 
       pst.setInt(1, 0); 
       pst.setInt(2, list.getModuleID()); 

       pst.setString(3, (list.isCreate())==true? "T" : "F"); 
       pst.setString(4, (list.isEdit())==true? "T" : "F"); 
       pst.setString(5, (list.isDelete())==true? "T" : "F"); 
       pst.setString(6, (list.isView())==true? "T" : "F"); 
       pst.executeUpdate(); 
//    System.out.println("Method called"+value); 

      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 


    } 


} 

的js

<script type="text/javascript"> 
    $(function() { 
     $(PrimeFaces.escapeClientId('form:tableId')).on(
       "change", 
       "input[type='checkbox'][name*='edit'], input[type='checkbox'][name*='create'], input[type='checkbox'][name*='delete']", 
       function() { 
        var tr = $(this).parent().parent(); 
        var view = tr 
          .find("input[type='checkbox'][name*='view']"); 
        var create = tr 
          .find("input[type='checkbox'][name*='create']"); 
        var edit = tr 
          .find("input[type='checkbox'][name*='edit']"); 
        var deleteBox = tr 
          .find("input[type='checkbox'][name*='delete']"); 
        if ($(this).is(':checked')) { 
         view.prop("checked", true); 
        } else { 
         if (create.is(':checked') || edit.is(':checked') 
           || deleteBox.is(':checked')) { 
          view.prop("checked", true); 
         } else 
          view.prop("checked", false); 
        } 
       }); 
     $(PrimeFaces.escapeClientId('form:tableId')).on(
       "change", 
       "input[type='checkbox'][name*='view']", 
       function() { 
        var tr = $(this).parent().parent(); 
        var view = tr.find("input[type='checkbox'][name*='view']"); 
        var create = tr.find("input[type='checkbox'][name*='create']"); 
        var edit = tr.find("input[type='checkbox'][name*='edit']"); 
        var deleteBox = tr 
          .find("input[type='checkbox'][name*='delete']"); 
        if ($(this).is(':not(:checked)')) { 
         create.prop("checked", false); 
         edit.prop("checked", false); 
         deleteBox.prop("checked", false); 
        } 
       }); 
    }); 
</script> 

Actual working scree

+0

我不明白你在做什麼。我無法找到根模塊視圖和子模塊。我的猜測是你想標記用戶選擇的行的複選框(用#{modules.view})。那是對的嗎? –

+0

爲這個「根模塊」設置一個id屬性。** **,然後爲其中的所有模塊添加一個更改事件。 $('#rModule')。children()。each(function(){$(this).on('click',function(){$(this).parent()。addClass('active'); })});'。添加一個css類'active',它將設置一些突出顯示的顏色,以區分根元素的選擇 – dreamweiver

+0

在附加屏幕中有兩行(根模塊ID和模塊ID)根模塊ID表示父模塊,模塊ID表示子ID )如果用戶選擇子ID需要自動標記父複選框(與#{modules.view}) –

回答

0

假設你使用一個樹形結構工作對於家長和孩子相同的實體,我會做一些類似的:

<p:selectBooleanCheckbox id="view" value="#{modules.view}" widgetVar="ckBoxVar#{modules.rootID}" onchange="#{(modules.moduleID ne null) ? 'ckBoxVar' : ''}#{(modules.moduleID ne null) ? modules.moduleID : ''}#{(modules.moduleID ne null) ? '.check()' : ''}" /> 

出於某種原因,我有這種強烈的感覺,當你寫:

<p:column headerText="Root Module ID:"> 
    <h:outputText value="#{modules.moduleID}" /> 
</p:column> 
<p:column headerText="Module ID:"> 
    <h:outputText value="#{modules.rootID}" /> 
</p:column> 

你實際上是想說這個:

<p:column headerText="Root Module ID:"> 
    <h:outputText value="#{modules.rootID}" /> 
</p:column> 
<p:column headerText="Module ID:"> 
    <h:outputText value="#{modules.moduleID}" /> 
</p:column> 
+0

你會注意到onchange是巨大的。這是因爲我不知道使用el表達式連接字符串的更好方法;)。 –

+0

相同的解決方案,但取消選中不起作用。如果我取消選中我想要刪除所選 –

+0

請爲此回覆任何一個帖子。 –