2012-10-09 3 views
3

동일한 페이지의 항목 목록을 편집하고 싶습니다. 각 항목은 별도의 양식을 사용하여 편집해야합니다. ui : repeat 내에서 h : form을 만들고 있습니다. 마지막 양식이 제출 될 때만 사용자 입력이 관리 빈에 적용됩니다. 다른 모든 형식의 경우 사용자 입력이 모델에 적용되지 않습니다. 뷰에서 <h:form> 내에서 <ui:repeat> 전적으로 작동하지 않으며 마지막에만 <h:form>이 처리됩니다.

@ManagedBean 
public class Controller { 
    Logger logger = Logger.getLogger("TestWeb"); 
    private List<Customer> customerList; 

    public List<Customer> getCustomerList() { 
     if (customerList == null) { 
      customerList = new ArrayList<Customer>(); 
      customerList.add(new Customer("Daffy Duck", "[email protected]"));       
      customerList.add(new Customer("Bugs Bunny", "[email protected]"));  
      customerList.add(new Customer("Samity Sam", "[email protected]")); 
     } 
     return customerList; 
    } 
    public String updateCustomer(Customer c) { 
     logger.info("Updating: " + c.getName()); 
     return null; 
    } 
} 

, 나는 모든 솔루션없이 시간을 검색

<ui:repeat var="c" value="#{controller.customerList}"> 
<h:form> 
    <h3>Edit Customer</h3> 
    Name: <h:inputText value="#{c.name}"/><br/> 
    E-mail: <h:inputText value="#{c.email}"/><br/> 
    <h:commandButton value="Update" 
    action="#{controller.updateCustomer(c)}"/> 
</h:form> 
</ui:repeat> 

있습니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 단일 폼을 사용하고 ui : repeat를 사용하여 해킹 할 수 있습니다. 그러나 많은 문제가 있으며 그 길을 택하지 않을 것입니다. 감사.

+0

''만 ''으로 감쌀 수 있습니다. – kolossus

+0

@kolossus, 확실합니까? 양식에서 명령 단추를 래핑하려고했습니다. 그것은 그 문제를 해결하지 못했습니다. – RajV

+0

오? 되돌아 보면, 마크 업이 렌더링 될 때와 마찬가지로, 여러분이'updateCustomer' 메쏘드에 제공하는 인자는 마지막 값으로 설정되었을 것입니다. ''을 사용하여 선택한 값을 뒷받침 빈에 제공하고 엔티티의 ID 만 전달하면됩니다. 나는 이것을 사용했기 때문에 효과가 있다고 확신한다. 그래도 ID를 앞뒤로 통과시키는 보안 위험이 있음을 알립니다. 매개 변수를 어떻게 든 보호하고 싶을 수도 있습니다 – kolossus

답변

8

이것은 Mojarra에서 상태 저장 <ui:repeat>의 버그입니다. http://java.net/jira/browse/JAVASERVERFACES에 유사한 문제 보고서가 여러 개 있는데 그 중 하나가 issue 2243입니다.

당신은 기본적으로 2 가지 옵션이 있습니다 : 다른 반복하는 구성 요소 (예를 들어 <c:forEach>, <h:dataTable>, <t:dataList>, <p:dataList> 등)를 사용하거나 (이 구조가 제대로 작동에 <ui:repeat>을)에서 MyFaces에 의해 인 Mojarra를 교체합니다.

+1

을 사용하여 솔루션을 수정했고 모든 것이 현재 작동 중입니다. 감사! – RajV

관련 문제