2014-01-24 25 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

请为此回复任何一个帖子。 –