2014-10-19 47 views
0

检查属性与价值从选择按钮,为了更好地理解什么,我想在这里实现的是我的问题的可视化表示:更新Tapestry中

enter image description here

在上图中,我有一个列表所有票据,状态选择按钮和保存按钮。现在,当用户想要更改(更新)票据状态时,他会检查票据,并且一旦用户单击保存按钮,所有检查的票据应该从选择按钮的状态更新。

我的Java代码到目前为止是这样的:

/** 
    * 
    * @author 
    */ 
    public class POS { 

     @Inject 
     private Request request; 
     @Inject 
     private BiznisLogika tiketDao; 
     @Inject 
     private Session session; 
     @InjectComponent 
     private Zone result; 
     @SessionState 
     @Property 
     private SearchCriteria criteria; 
     @SessionState 
     @Property 
     private SearchCriteriaTwo criteriaTwo; 
     @SuppressWarnings("unused") 
     @Property 
     private GridDataSource source = new TicketDataSource(session, Tiket.class); 
     @SuppressWarnings("unused") 
     @Property 
     private Tiket currentTicket; 
     @Property 
     @Persist 
     private TiketStatus noviStatus; 
     @Property 
     private SelectModel tiketSelectModel; 
     @Inject 
     SelectModelFactory selectModelFactory; 
     @Inject 
     private Session hibernate; 
     @Inject 
     private GenericDao genericDao; 

     void setupRender() { 
      criteriaTwo = null; 
      criteria = null; 
     } 

     private final class TicketDataSource extends HibernateGridDataSource { 

      private TicketDataSource(Session session, @SuppressWarnings("rawtypes") Class entityType) { 
       super(session, entityType); 
      } 

      @Override 
      public int getAvailableRows() { 
       return criteria.getSearchPattern() == null ? 0 : super.getAvailableRows(); 
      } 

      @Override 
      protected void applyAdditionalConstraints(Criteria crit) { 
       crit.add(Restrictions.ilike("ticketSerial", criteria.getSearchPattern())).add(Restrictions.ilike("ticketDate", criteriaTwo.getSearchPattern())); 
      } 
     } 

     void onValidateFromDelete() { 
      // Unfortunately, this method is never called because Checkbox doesn't bubble up VALIDATE. It's a shame because 
      // this would be the perfect place to validate whether deleting is OK, or to put an entry in deleteCopyByRowNum. 
      // Please vote for https://issues.apache.org/jira/browse/TAP5-2075 . 
     } 
     // The Loop component will automatically call this for every row as it is rendered. 

     public boolean isDelete() { 
      return false; 
     } 

     // The Loop component will automatically call this for every row on submit. 
     public void setDelete(boolean delete) { 
     } 

     @OnEvent(value = EventConstants.SUCCESS) 
     Object searchTickets() { 
      return request.isXHR() ? result.getBody() : null; 
     } 

     Object onAction() { 

      return request.isXHR() ? result.getBody() : null; 

     } 

     public ValueEncoder<TiketStatus> getTiketStatusEncoder() { 
      return new ValueEncoder<TiketStatus>() { 
       @Override 
       public String toClient(TiketStatus value) { 
    // return the given object's ID 
        return String.valueOf(value); 
       } 

       @Override 
       public TiketStatus toValue(String id) { 
        return TiketStatus.valueOf(id); 
        // return (Tiket) genericDao.getById(Tiket.class, Long.parseLong(id)); 
       } 
      }; 
     } 

     @CommitAfter 
     Object onSaveThemAll() { 
      for (int i = 0; i < source.getAvailableRows(); i++) { 
       currentTicket.setTicketStatus(noviStatus); 
       hibernate.merge(currentTicket); 


      } 
      return request.isXHR() ? result.getBody() : null; 

     } 

    } 

我的TML代码如下所示:

<t:layout t:pageTitle='${message:POS}' xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter"> 

    <form t:type="form" t:zone="result" t:id="searchForm" class="full-form" > 

     <table> 
      <tr> 
       <th> 
        <label t:type="label" t:for="query">Buscar</label> 
       </th> 
       <td><input type="text" t:type="textfield" t:id="query" t:value="criteria.query" /></td> 
       <td><input type="text" t:type="datefield" t:id="queryTwo" t:value="criteriaTwo.queryTwo" /></td> 
      </tr> 
      <tr> 
       <th><label t:type="label" t:for="rowsPerPage">Resultados</label></th> 
       <td><select t:type="select" t:id="rowsPerPage" t:value="criteria.rowsPerPage" t:model="literal:5,10,15,20"></select></td> 
      </tr> 
     </table> 
     <div class="form-submit"> 
      <input style="color:black;" type="submit" t:type="submit" class="btn-active" value="Search" /> or <a href="#">cancel</a> 
      <span t:trigger="searchForm" t:zone="result"></span> 
     </div> 
    </form> 
    <t:form t:id="deletetables"> 
     <div t:type="zone" t:id="result" id="result" class="section result"> 
      <table t:type="grid" t:source="source" t:inPlace="true" t:add="ticketStatusUpdate" t:rowsPerPage="criteria.rowsPerPage" t:include="ticketSerial,ticketStatus, ticketNumber,ticketDate" t:row="currentTicket"> 
       <p:ticketStatusUpdateCell> 
        <t:form> 
         <input t:id="delete" t:type="checkbox" value="delete"> 
         </input> 
        </t:form> 

       </p:ticketStatusUpdateCell> 
       <p:empty> 
        <p class="empty-result">${message:no-result}</p> 
       </p:empty> 

      </table></div> 

     <t:select t:id="noviStatus" encoder="tiketStatusEncoder" style="color:black;" validate="required" > 

     </t:select> 

    <t:eventlink t:id="saveThemAll"> Save </t:eventlink> 
    </t:form> 

</t:layout> 

现在我想知道我怎么能实现它,即。如何使用从t中提取的新状态更新每个选定的故障单:select t:id =“noviStatus”按钮。

P.S.我在神奇的Tap e-learning网站JumpStart上检查了这个例子,但是我不知道如何在我的案例中实现它。 http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/gridwithdeletecolumn1

回答

0

有几种方法可以解决这个问题,但我个人认为处理这种事情最简单的方法是给CurrentTicket对象添加一个瞬态值并在网格中设置该值。

@NonVisual 
@Transient 
private boolean delete; 

//getters and setters 
网格

<input t:id="delete" t:type="checkbox" value="currentTicket.delete"> 

当你提交你就可以通过你的票列表进行迭代并读取删除价值形态

然后。

这样做的另一种方法是使用getter/setter进行删除,并将删除布尔值保存在某种具有对象ID的映射中。