2014-01-13 4 views
1

모듈 목록에보기, 만들기, 편집 및 삭제라는 네 개의 수표가 있습니다. 사용자가 생성 확인란을 선택하거나 편집 확인란을 선택하거나 확인란을 자동으로 체크 표시 확인란을 선택 취소하면보기 확인 선택을 취소하면 create.Edit 및 Delete가 자동으로 선택 취소됩니다. JSF를 처음 사용하면서이 문제를 해결하도록 도와주세요. 사전JSF selectbooleancheckbox 유효성 확인

감사에 감사 모한

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



         <p:column headerText="Root 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="vi" value="#{roleModule.view[modules.moduleID]}"/> 
          </p:column> 
          <p:column headerText="Create" > 
           <h:selectBooleanCheckbox value="#{roleModule.create[modules.moduleID]}"> 
           <p:ajax update="vi" listener="#{roleModule.permissionCheck}"/> 
           </h:selectBooleanCheckbox> 

          </p:column> 
          <p:column headerText="Edit" > 
           <h:selectBooleanCheckbox value="#{roleModule.edit[modules.moduleID]}"> 
           <p:ajax update="vi" listener="#{roleModule.permissionCheck}"/> 
           </h:selectBooleanCheckbox> 
          </p:column> 
          <p:column headerText="Delete" > 
           <h:selectBooleanCheckbox value="#{roleModule.delete[modules.moduleID]}"> 
           <p:ajax update="vi" listener="#{roleModule.permissionCheck}"/> 
           </h:selectBooleanCheckbox> 
          </p:column> 

        </p:dataTable> 
+0

처럼 시도 코드를 자바 스크립트 코드를 추가 할 수 있습니다.그게 우리를 도울 것입니다 – newuser

+0

당신의 심판을위한 제 코드. 덕분에 –

답변

1

나는 jQuery에서 그것을 할 것이고, 하나의 이유 때문에 모든 체크를 풀고 검사가 뷰에서 완료된 후에 서버 측 레벨로 가져가는 것이 기본 동작이다.

JS

 $(PrimeFaces.escapeClientId('form:table')) 
     .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:table')).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); 
      } 
     }); 

참고 : 테이블을 업데이트 할 경우, 당신은 스크립트를 다시 실행해야합니다 또는 당신은 단지 형태 ID로 선택기를 대체 할 수있다. like

물론 $(document).ready()에 코드를 포함해야합니다.


편집 : 귀하의 요청에 따라 를 기준으로합니다.

작은 project on github을 만들었습니다. 프로젝트를 다운로드하고 jQuery (JS in general)가 JSF와 함께 작동하는 방법을 확인하십시오. 여기에 라이브 demo이 있습니다.

두 개의 주 파일은 main.xhmlcheckBoxesJQuery.js입니다.

희망이 있습니다.

+0

작업 코드를 게시하여 제게 JQuery와 JSF에 익숙해 져서 쉽게 이해할 수 있도록하십시오. –

+0

@JSFLearner 괜찮습니다. github ....에 대한 링크가있는 게시물을 업데이트했습니다. –

+0

@HatemAlimam이 GH 프로젝트와 잘 어울립니다 ;-) –

0

이 시도, 이렇게하면 JSF 코드를 도움이 될 수

<h:selectBooleanCheckbox value="#{bean.viewChecked}" > 
    <a4j:support action="#{bean.viewCheckBoxAction}" event="onclick" reRender="panelId"/> 
</h:selectBooleanCheckbox> 
<h:outputText value="View" /> 

<h:selectBooleanCheckbox value="#{bean.createChecked}" > 
    <a4j:support action="#{bean.createCheckBoxAction}" event="onclick" reRender="panelId"/> 
</h:selectBooleanCheckbox> 
<h:outputText value="Create" /> 

<h:selectBooleanCheckbox value="#{bean.editChecked}" > 
    <a4j:support action="#{bean.editCheckBoxAction}" event="onclick" reRender="panelId"/> 
</h:selectBooleanCheckbox> 
<h:outputText value="Edit" /> 

<h:selectBooleanCheckbox value="#{bean.deleteChecked}" > 
    <a4j:support action="#{bean.deleteCheckBoxAction}" event="onclick" reRender="panelId"/> 
</h:selectBooleanCheckbox> 
<h:outputText value="Delete" /> 

콩 코드 :

public String viewCheckBoxAction() 
    { 
     if(!viewChecked) // while view is unchecked then uncheck all the others 
     { 
      editChecked = false; 
      deleteChecked = false; 
      createChecked = false; 
     } 

     return null; 
    } 


    public String createCheckBoxAction() 
    { 
     viewCheckManage(); 
     return null; 
    } 


    public String editCheckBoxAction() 
    { 
     viewCheckManage(); 
     return null; 
    } 


    public String deleteCheckBoxAction() 
    { 
     viewCheckManage(); 
     return null; 
    } 

    private void viewCheckManage() 
    { 
     if(createChecked || deleteChecked || editChecked) // while any one is checked then view also checked 
     { 
      viewChecked = true; 
     } 
     else 
     { 
      viewChecked = false; 
     } 
    } 
+0

나와 같은 개념이 작동하지 않습니다. 그리고 귀하의 정보에 대해, 사실 나는 primefaces datatable에서 동적 체크 박스를 사용하고 있습니다 –

+0

하나 하나 시도했습니다. 현재 행의 색인을 가져온 다음 bean 값을 메소드에 전달할 수 있습니다. – newuser

+0

더 많은 정보를 얻으려면 JSF 코드도 게시하십시오. 사전에 감사드립니다 –

0

당신이

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:pe="http://primefaces.org/ui/extensions"> 
<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Test</title> 
</h:head> 
<h:body> 

    <h:form id="form"> 
    <p:dataTable value="#{roleModule.modulesList}" var="module" id="table"> 
     <p:column headerText="Module ID:"> 
      <h:outputText value="#{module.moduleID}" /> 
     </p:column> 
     <p:column headerText="Root Module ID:"> 
      <h:outputText value="#{module.rootID}" /> 
     </p:column> 
     <p:column headerText="Module Description:"> 
      <h:outputText value="#{module.moduleDescription}" /> 
     </p:column> 
     <p:column headerText="View"> 
      <h:selectBooleanCheckbox id="view" value="#{module.view}"> 
       <p:ajax update=":form:table" listener="#{roleModule.permissionCheck}" /> 
      </h:selectBooleanCheckbox> 
     </p:column> 
     <p:column headerText="Create"> 
      <h:selectBooleanCheckbox id="create" value="#{module.create}"> 
       <p:ajax update=":form:table" listener="#{roleModule.permissionCheck}" /> 
      </h:selectBooleanCheckbox> 

     </p:column> 
     <p:column headerText="Edit"> 
      <h:selectBooleanCheckbox id="edit" value="#{module.edit}"> 
       <p:ajax update=":form:table" listener="#{roleModule.permissionCheck}" /> 
      </h:selectBooleanCheckbox> 
     </p:column> 
     <p:column headerText="Delete"> 
      <h:selectBooleanCheckbox id="delete" value="#{module.delete}"> 
       <p:ajax update=":form:table" listener="#{roleModule.permissionCheck}" /> 
      </h:selectBooleanCheckbox> 
     </p:column> 

     </p:dataTable> 
    </h:form> 
</h:body> 
</html> 

같은 것을 시도 할 수 있으며 모듈이 엔티티 빈 경우, 당신은 당신의 체크 박스에 주석 할 수는

import java.io.Serializable; 


public class Module implements Serializable { 
    private static final long serialVersionUID = 176253618089501709L; 
    private String moduleID,rootID,moduleDescription; 
    private boolean view,edit,delete,create; 

    public String getModuleID() { 
     return moduleID; 
    } 

    public void setModuleID(String moduleID) { 
     this.moduleID = moduleID; 
    } 

    public String getRootID() { 
     return rootID; 
    } 

    public void setRootID(String rootID) { 
     this.rootID = rootID; 
    } 

    public String getModuleDescription() { 
     return moduleDescription; 
    } 

    public void setModuleDescription(String moduleDescription) { 
     this.moduleDescription = moduleDescription; 
    } 

    public boolean isView() { 
     return view; 
    } 

    public void setView(boolean view) { 
     this.view = view; 
    } 

    public boolean isEdit() { 
     return edit; 
    } 

    public void setEdit(boolean edit) { 
     this.edit = edit; 
    } 

    public boolean isDelete() { 
     return delete; 
    } 

    public void setDelete(boolean delete) { 
     this.delete = delete; 
    } 

    public boolean isCreate() { 
     return create; 
    } 

    public void setCreate(boolean create) { 
     this.create = create; 
    } 

    @Override 
    public String toString() { 
     return "Module [moduleID=" + moduleID + ", rootID=" + rootID + ", moduleDescription=" + moduleDescription + ", view=" + view + ", edit=" + edit + ", delete=" + delete + ", create=" + create + "]"; 
    } 

} 

마지막

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.component.UIInput; 
import javax.faces.context.FacesContext; 
import javax.faces.event.AjaxBehaviorEvent; 


@ManagedBean 
@ViewScoped 
public class RoleModule implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    private List<Module> modulesList; 

    @PostConstruct 
    public void init() { 
     modulesList = new ArrayList<Module>(); 

     Module m1 = new Module(); 
     m1.setModuleID("1"); 
     m1.setRootID("root"); 
     m1.setModuleDescription("desc1"); 
     modulesList.add(m1); 

     Module m2 = new Module(); 
     m2.setModuleID("2"); 
     m2.setRootID("root"); 
     m2.setModuleDescription("desc2"); 
     modulesList.add(m2); 
    } 

    public void permissionCheck(AjaxBehaviorEvent event){ 
     Boolean value = (Boolean) ((UIInput) event.getComponent()).getValue(); 

     UIInput component = ((UIInput) event.getComponent()); 

     FacesContext context = FacesContext.getCurrentInstance(); 
     Module module = context.getApplication().evaluateExpressionGet(context, "#{module}", Module.class); 

     System.out.println(module+","+value+","+component.getId()); 

     switch(component.getId()){ 
      case "create": 
      case "delete":   
      case "edit": 
       if (value){ 
        module.setView(true); 
       } 
       break; 
      case "view": 
       if (!value){ 
        module.setCreate(false); 
        module.setDelete(false); 
        module.setEdit(false); 
       } 
     } 
    } 

    public List<Module> getModulesList() { 
     return modulesList; 
    } 

    public void setModulesList(List<Module> modulesList) { 
     this.modulesList = modulesList; 
    } 

} 
@Transient

와 속성

업데이트 : 약간의 정오표

   //try as non-string using equal 

       Path pathFilterNonString = getPath(filter.getKey(), site, siteType); 
       Class pathType = pathFilterNonString.getJavaType(); 

       if (pathType.equals(Long.class)){ 
        try{ 
         filterCondition = cb.and(filterCondition, cb.equal(pathFilterNonString, Long.valueOf(filter.getValue()))); 
        }catch(java.lang.NumberFormatException nfe){ 
         //ignore 
         //java.lang.NumberFormatException: For input string: "a" 
        } 
       }else if (pathType.equals(Timestamp.class)){ 
        try{ 
         filterCondition = cb.and(filterCondition, cb.equal(pathFilterNonString, Timestamp.valueOf(filter.getValue()))); 
        }catch(java.lang.IllegalArgumentException e){ 
         //ignore 
         //java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] 
        } 

       } 
+0

Mr. Leonardo Kenji, 귀하의 코딩이 잘 작동합니다. –

+0

Mr. Leonardo Kenji, –

0

당신은 체크 박스의 onchange를-속성을 사용하고 게시 document.getElementByID('formID:tableID:lineID:boxID').checked=true

관련 문제