2012-09-24 2 views
3

JSF와 PrimeFaces로 제품 가격을 추가/편집하기위한 양식을 개발 중입니다. 단일 제품은 볼륨에 따라 여러 가격을 가질 수 있으며, 이는 <p:dataTable>으로 표시됩니다. 양식의 유효성을 검사하지 않고 p : dataTable에 동적으로 새 행을 추가하는 방법은 무엇입니까?

백킹 빈 :

@ManagedBean 
@ViewScoped 
public class ProductBean { 

    protected Product product; 
    protected List<ProductPrice> productPrices; 

    public void addNewPrice() { 
    ProductPrice productPrice = new ProductPrice(); 
    productPrice.setPrice(new BigDecimal(0)); 
    this.productPrices.add(productPrice); 
    } 

    // ... 
} 

Facelet 페이지 :

<h:form id="productForm"> 
    <p:inputText value="#{productBean.product.name}" required="true"> 
    <f:ajax event="blur" render="nameMessage" /> 
    </p:inputText> 
    <p:message id="nameMessage" for="name" /> 

    <p:dataTable id="pricesList" ...> 
    </p:dataTable> 
    <p:commandButton value="Add another price" update="pricesList" action="#{productBean.addNewPrice()}" /> 
    <p:commandButton value="Submit" action="#{productBean.submit}" /> 
</h:form> 

가 어떻게해야 무엇 첫 번째 단추를 않습니다 "다른 가격을 추가": 새 행을 추가로 "pricesList ". 그러나 양식이 유효한 경우에만 (양식이 유효하지 않음, 제품 이름이 설정되지 않은 경우).

제 문제는 양식에 두 개의 commandButton이 있다는 것입니다.하지만 commandButton없이 원하는 기능을 얻는 방법을 모르겠습니다. 나는 많은 방법을 시도했다 : ajax 기능을 가진 표준 <p:button>에 "다른 가격 추가"변경; 버튼의 결과로 인해 작동하지 않습니다. 나는이 버튼에 대해 "type = button"을 시도했지만이 경우에는 아무 일도 일어나지 않습니다.

내가 원하는 기능을 수행하기위한 제안이 있습니까? 내 문제를 해결하는 버튼이 필요하지 않습니다.

답변

7

<p:commandButton> 제출하고, 프로세스 전체 양식을. 이것은 실제로 모든 입력 필드의 유효성을 검사합니다. 따라서 process 속성을 사용하여 기본값을 @form으로 지정하면됩니다. 특정 경우에는 @this을 사용하여 명령 단추의 자체 동작 만 호출되도록 할 수 있습니다.

<p:commandButton value="Add another price" process="@this" update="pricesList" action="#{productBean.addNewPrice()}" /> 
+0

그게 다예요, 고마워요! –

+0

반갑습니다. – BalusC

0

무엇이 잘못 되었습니까? p : commandButton 동적으로 행을 추가 하시겠습니까? 질문을 올바르게 이해했다면, 데이터 테이블 목록에 새 행 정보를 추가하기 위해 관리 빈에 대한 요청이 분명히 필요합니다. p : commandButton이 마음에 들지 않으면 언제든지 p : commandLink으로 갈 수 있습니다. 행 데이터를 편집하려면 p : rowEditorp : datatable을 사용할 수 있습니다.

check out the showcase example for datatable row editing

희망이 도움이 :) 기본적으로

+0

두 commandButton 자체는 문제가되지 않습니다. 내 문제는, 첫 번째는 dataTable에 새 행을 추가하고 뷰 ID를 새로 고치면 정상적인 제출 버튼처럼 작동한다는 것입니다. 양식이 유효하지 않은 경우이 버튼을 사용하여 새 행을 추가 할 수 없습니다. 양식이 유효한 경우 버튼은 한 번만 작동합니다. Btw, datatable 및 rowEditor를 사용하여 exeactly 내가 뭘하고 싶습니다. –

+0

@ MarcusSchultö에 오신걸 환영합니다. 양식이 유효하지 않다면 무슨 뜻입니까? 나는 당신이 내 애플 리케이션에서하고 싶은 것을 정확히했다. 추가 버튼을 클릭하면 다른 행 객체 (데이터 테이블 행이 저장되어있는 곳)를 arraylist (데이터 테이블 행을 포함)에 추가하는 backing bean에서 actionListener를 호출합니다. 추가 버튼 뒤에 코드를 게시 할 수 있습니까? – PermGenError

+0

스 니펫을 업데이트했습니다. 보시다시피 양식에 inputText "name"이 추가로 있습니다. 이름을 설정하지 않으면 양식이 유효하지 않으며 새 행이 추가되지 않습니다. 이름을 설정하면 "pricesList"에 새 행이 추가되지만 한 번만 작동합니다. –

관련 문제