2014-03-01 3 views
0

사용자가 mysql 테이블을 업데이트 할 수 있도록 페이지를 만들고 싶습니다. 이 테이블은 클라이언트 관리자가 변경할 수 있으므로 테이블 스키마를 읽고 즉시 필드를 만들어야합니다. 그 일을위한 기본 코드는 How to create dynamic JSF form fields이고, 아약스 코드는 How to add ajax validation to programmatically generated primefaces component입니다. 동적으로 생성 된 프라임 입력 필드에 ajax를 추가하는 방법

은 (내가 primefaces을 사용하고 있습니다 주) 나는 다음과 같은 코드를 사용 개념 페이지의 증거를 만들려면 :

for (int idx = 1; idx < 3; idx++) { 
     UIInput input = new InputText(); 
     input.setId("text" + idx); 
     ValueExpression targetExpression = facesContext.getApplication().getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{viewMakeFields.value}", String.class); 
     input.setValueExpression("value", targetExpression); 
     AjaxBehavior ab = new AjaxBehavior(); 
     ab.setAsync(true); 
     ab.setProcess("text"+idx); 
     input.addClientBehavior("blur", ab); // "change" doesn't work either 
     form.getChildren().add(input); 
    } 

다음, getter와 setter에, 나는 식별 할 구성 요소 ID를 받고 있어요 어떤 필드가 변경 : 아약스는 발사 내가 클릭 할 때 내가 얻을 버튼을 제출하지 않는

public static String getCallingComponentID() { 
    UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()); 
    return component.getId(); 
} 

public String getValue() { 
    String id = getCallingComponentID(); 
    System.out.println("getValue " + id); 
    return text1; 
} 

public void setValue(String text1) { 
    String id = getCallingComponentID(); 
    System.out.println("setValue " + id); 
    this.text1 = text1; 
} 

(나는 부분 및 완전을 제출 혼합 아는 것은 좋지 않다) :

INFO: getValue text1 
INFO: getValue text2 
INFO: getValue text1 
INFO: getValue text2 
INFO: setValue j_id1 
INFO: setValue j_id1 
INFO: getValue text1 
INFO: getValue text2 

두 가지 가능한 해결책을 볼 수 있습니다. 세터를 호출하는 구성 요소가 올바른 ID를 갖도록 아약스를 작동 시키거나 양식 제출을 통해 어떤 자식이 세터를 호출하는지 식별하십시오. 이전 버전은 뭔가가 변경 될 때까지 저장 버튼을 비활성화하려는 경우에 적합하지만이 시점에서 후자를 기꺼이 받아 들일 수 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

+0

나는 그 대답이 당신에게 적용된다고 생각하지 않습니다. AjaxBehavior는 JSF2 구문입니다. v1.x에서 지원되는 것으로는 생각하지 않습니다. – kolossus

+0

2.0을 사용하여 양식을 만드는 것이 효과적입니다. (나는 2.2를 돌리고있다.) (이것은 작동하는 부분이다.) 문제는 필드에 변화가있을 때마다 화재로 아약스 호출을받는 방법이다. 나는 p : editor의 valueChangeListener와 비슷한 문제를 겪고 있지 않으며 여기에서도 잘 작동 할 수있는 총체적인 문제가 있습니다. 그러나 클라이언트 행동 청취자는 옳은 것처럼 보입니다. 나는 그것이 어떻게 작동하는지 잘못 이해하고 싶습니다. – wjr

답변

0

이 코드가 효과적이라고 밝혀졌습니다. 내 사행의 어딘가에서 오류가 바뀌었고 나는 그것의 중요성을 이해하지 못했습니다. xhtml 파일에서 머리를 h : head로 바꾸면 필드를 추가하여 아약스가 작동합니다.

관련 문제