检查属性与价值从选择按钮,为了更好地理解什么,我想在这里实现的是我的问题的可视化表示:更新Tapestry中
在上图中,我有一个列表所有票据,状态选择按钮和保存按钮。现在,当用户想要更改(更新)票据状态时,他会检查票据,并且一旦用户单击保存按钮,所有检查的票据应该从选择按钮的状态更新。
我的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