2014-01-26 6 views
0

현재 TableTree를 구현하려고합니다. 하지만 어쨌든 노드를 확장하지는 않습니다. 나는 이것이 어떻게 일어날 수 있는지에 관해 아무것도 발견하지 못했습니다. 내 데모 - 설정에는 내 루트 노드의 하위 노드로 렌더링되어야하는 데이터가 포함되어 있습니다. 개찰구 코드를 통해 스테핑개찰구 6.5.0 : DefaultTableTree가 확장되지 않습니다

노드가 결코 EXPANDED

요소 OrderItem의 설정이 OrderWrapper -Entities을 표시하는 루트로의 상태를 변경하지 밝혔다.

다음은 관련 코드입니다. 더 많은 정보가 필요하다면 최선을 다해 제공 할 것입니다.

TableTree 포함하는 패널 :

@Service 
public class OrderService { 

public class CustomerDetailProvider implements 
     ISortableTreeProvider<CustomerDetailDto, String> { 

    IModel<Customer> customerModel; 

    ISortState<String> sortState; 

    public CustomerDetailProvider(Customer customer) { 
     this(new DefaultLoadableDetachableModel<>(customerDao, customer)); 
    } 

    public CustomerDetailProvider(IModel<Customer> customerModel) { 
     this.customerModel = customerModel; 
     sortState = new SingleSortState<String>(); 
     sortState.setPropertySortOrder("dateofOrderBegin", 
       SortOrder.ASCENDING); 
     LOG.info("CustomerDetailProvider created"); 
    } 

    @Override 
    public void detach() { 
     customerModel.detach(); 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public Iterator<? extends CustomerDetailDto> getChildren(
      CustomerDetailDto node) { 
     List<OrderItem> childrenList = orderItemDao.findByParentId(
       node.getOrderWrapperId()).list(); 

     return transformItemToDto(childrenList).iterator(); 
    } 

    @Override 
    public Iterator<? extends CustomerDetailDto> getRoots() { 
     List<OrderWrapper> rootList = orderWrapperDao 
       .getForCustomer(customerModel.getObject()); 

     return transformWrapperToDto(rootList).iterator(); 
    } 

    @Override 
    public ISortState<String> getSortState() { 
     return sortState; 
    } 

    @Override 
    public boolean hasChildren(CustomerDetailDto node) { 
     return node.getOrderWrapperId() != null; 
    } 

    @Override 
    public IModel<CustomerDetailDto> model(final CustomerDetailDto object) { 
     return new AbstractReadOnlyModel<CustomerDetailDto>() { 

      @Override 
      public CustomerDetailDto getObject() { 
       return object; 
      } 
     }; 
    } 

    private List<CustomerDetailDto> transformItemToDto(
      List<OrderItem> childrenList) { 
     List<CustomerDetailDto> resultList = new LinkedList<CustomerDetailDto>(); 

     DateConverter dateConverter = new DateConverter(); 
     BigDecimalCurrencyConverter currencyConverter = new BigDecimalCurrencyConverter(); 

     Locale locale = Locale.getDefault(); 

     for (OrderItem orderItem : childrenList) { 
      CustomerDetailDto nextElement = new CustomerDetailDto(); 

      nextElement.setComment(""); 
      nextElement.setDateOfOrderBegin(dateConverter.convertToString(
        orderItem.getDateOfCreation(), locale)); 
      nextElement.setTotalValue(currencyConverter.convertToString(
        orderItem.getTotalValue(), locale)); 
      nextElement.setBeerName(orderItem.getBeer().getName()); 
      nextElement.setAmount(orderItem.getAmount() + ""); 
      nextElement.setOrderItemId(orderItem.getId()); 

      resultList.add(nextElement); 
     } 
     return resultList; 
    } 

    private List<CustomerDetailDto> transformWrapperToDto(
      List<OrderWrapper> rootList) { 
     List<CustomerDetailDto> resultList = new LinkedList<CustomerDetailDto>(); 

     DateConverter dateConverter = new DateConverter(); 
     BigDecimalCurrencyConverter currencyConverter = new BigDecimalCurrencyConverter(); 

     Locale locale = Locale.getDefault(); 

     for (OrderWrapper orderWrapper : rootList) { 
      CustomerDetailDto nextElement = new CustomerDetailDto(); 

      nextElement.setComment(orderWrapper.getComment()); 
      nextElement.setDateOfOrderBegin(dateConverter.convertToString(
        orderWrapper.getDateOfOrderBegin(), locale)); 
      nextElement.setOrderWrapperId(orderWrapper.getId()); 
      nextElement.setTotalValue(currencyConverter.convertToString(
        orderWrapper.getTotalValue(), locale)); 
      nextElement.setUserName(orderWrapper.getUser().getUserName()); 

      resultList.add(nextElement); 
     } 
     return resultList; 
    } 

} 

private static final Logger LOG = Logger.getLogger(OrderService.class); 

@Autowired 
private CustomerDao customerDao; 

@Autowired 
private OrderItemDao orderItemDao; 

@Autowired 
private OrderWrapperDao orderWrapperDao; 

public OrderService() { 
} 

public CustomerDetailProvider getProviderForCustomer(Customer c) { 
    return new CustomerDetailProvider(c); 
} 

} 

DataTransferObject :

public class CustomerDetailPanel extends Panel implements CustomerSelecting { 

@SpringBean 
OrderService orderService; 

@SpringBean 
OrderWrapperDao orderWrapperDao; 

public CustomerDetailPanel(String id) { 
    super(id); 
    init(); 
} 

public CustomerDetailPanel(String id, IModel<?> model) { 
    super(id, model); 
    init(); 
} 

private List<? extends IColumn<CustomerDetailDto, String>> createColumns() { 
    List<IColumn<CustomerDetailDto, String>> result = new LinkedList<>(); 

    result.add(new TreeColumn<CustomerDetailDto, String>(Model.of("Datum"))); 

    result.add(new PropertyColumn<CustomerDetailDto, String>(Model 
      .of("Amount"), "amount")); 

    //more columns... 

    return result; 
} 

private void init() { 
    WebMarkupContainer orders; 
    Customer c = (Customer) this.getDefaultModelObject(); 
    if (c != null && c.getId() != null) { 
     CustomerDetailProvider providerForCustomer = orderService 
       .getProviderForCustomer(c); 

     List<? extends IColumn<CustomerDetailDto, String>> columns = createColumns(); 

     DefaultTableTree<CustomerDetailDto, String> tree = new DefaultTableTree<CustomerDetailDto, String>(
       "orders", columns, providerForCustomer, 20); 
     orders = tree; 
    } else { 
     orders = new WebMarkupContainer("orders"); 
    } 

    add(orders); 

} 

@Override 
public void performStepCustomerSelected(AjaxRequestTarget target, 
     Customer customer) { 
    // Nothing to do yet 
} 

} 

ISortableTreeProvider 생성 서비스 사전에 어떤 도움

public class CustomerDetailDto { 

private String amount; 

private String beerName; 

private String comment; 

private String dateOfOrderBegin; 

private Long orderItemId; 

private Long orderWrapperId; 

private String totalValue; 

private String userName; 

@Override 
public boolean equals(Object obj) { 
    if (obj == this) { 
     return true; 
    } 
    if (!(obj instanceof CustomerDetailDto)) { 
     return false; 
    } 
    CustomerDetailDto other = (CustomerDetailDto) obj; 
    return other.getOrderItemId() == this.getOrderItemId() 
      && other.getOrderWrapperId() == this.getOrderWrapperId(); 
} 

@Override 
public int hashCode() { 
    if (this.getOrderItemId() != null) { 
     return this.getOrderItemId().hashCode(); 
    } 

    if (this.getOrderWrapperId() != null) { 
     return this.getOrderWrapperId().hashCode(); 
    } 
    return super.hashCode(); 
} 

@Override 
public String toString() { 
    return dateOfOrderBegin; 
} 

//Getters and setters... 

} 

감사 및 실례 내 울퉁불퉁 한 영어.

답변

0

난 후 모든 작업을 얻었다. 내 실수는 AbstractReadOnlyModel입니다. 기능을 변경 한 후

@Override 
public IModel<CustomerDetailDto> model(final CustomerDetailDto object) { 
    return Model.of(object); 
} 

모두 정상적으로 작동합니다. 이 게시물을 읽은 모든 분들께 감사드립니다.

0

읽기 ITreeProvider 번호 모델() :

Important note: The model must implement {@link Object#equals(Object)} and {@link Object#hashCode()} ! 

모델이 당신을 위해이 작업을 수행,하지만 너무 AbstractReadOnlyModel.

관련 문제