2017-03-15 3 views
0

vaadin-gird를 사용할 때 이상한 동작이 발생합니다. 난 그냥 arrayedList에 LinkedHashMaps 격자 (gRegisteredRecords)에서 선택한 행의 정보를 저장하려고합니다. 어떤 이유로 든 처음 버튼 btnGenerateXML을 클릭하면 getSelectedRows() 메서드는 빈 목록을 반환하지만 두 번째 것은 잘 작동합니다 ... 왜 처음 시도에서는 작동하지 않습니까? 여기 코드입니다 .. 감사합니다!Vaadin Gird getSelectedRows()는 빈을 반환하지만 선택된 행이 있습니다.

_btnGenerateXML.addClickListener(p -> { 
     ArrayList <LinkedHashMap<String, String >> alSelected = new ArrayList<>(); 

     for (Object itemId: gRegisteredRecords.getSelectedRows()) { 

      LinkedHashMap<String, String> lhmProgrammValue = new LinkedHashMap<>(); 

      this.gRegisteredRecords.getContainerDataSource(). 
      getContainerPropertyIds().forEach(propertyId -> 
       lhmProgrammValue.put(propertyId.toString(), 
        this.gRegisteredRecords.getContainerDataSource() 
        .getItem(itemId) 
        .getItemProperty(propertyId) 
        .getValue().toString())); 
      alSelected.add(lhmProgrammValue); 
     } 

    } 
} 

답변

0

미래에 다른 사람이이 문제에 직면 한 경우 문제를 발견하고 해결책을 공유하고 싶습니다. 내가 처음 생각한 것처럼 문제는 clicklistener와 함께 제공되지 않습니다. _btnGenerateXML 버튼이 Vaadin com.vaadin.server.FileDownloader 객체에 연결되었으므로 요소가 제대로 검색되어 목록에 추가되었지만 filedownloader 요소는 다운로드 할 파일을 생성 할 때 요소를 가져 오지 않습니다.

public class CustomFileDownload extends FileDownloader { 
public interface OnDemandStreamResource extends StreamSource { 
    String getFilename(); 
    } 

    private static final long serialVersionUID = 1L; 
    private final OnDemandStreamResource onDemandStreamResource; 

    public CustomFileDownload (OnDemandStreamResource onDemandStreamResource) { 
    super(new StreamResource(onDemandStreamResource, "")); 
    this.onDemandStreamResource = onDemandStreamResource; 
    } 

    @Override 
    public boolean handleConnectorRequest (VaadinRequest request, VaadinResponse response, String path) 
    throws IOException { 
    getResource().getStream().setParameter("Cache-Control", "private,no-cache,no-store"); 
    getResource().getStream().setParameter("Pragma", "no-cache"); 
    getResource().setCacheTime(0); 
    getResource().setFilename(onDemandStreamResource.getFilename()); 
    return super.handleConnectorRequest(request, response, path); 
    } 
} 

희망이 도움 :이 FileDownloader에서 확장하는 클래스를 작성하고 다음과 같은 방법 handleConnectorRequest를 무시 해결