2014-10-18 46 views
0

我在这里有很奇怪的情况,我不能设置字段,因为输入在客户端,并且onSuccess函数只有在我按下mixin中的确认后才会调用。不能退缩,不能前进。挂毯确认对话

我按确认,我打开确认对话框。但是因为这里的值尚未设置(他们正在等待“确认”对话框中的提交),所以我将这些值设置为空值和零值。你能否告诉我如何摆脱这种情况?此外,我还担心的是,一旦我处于对话模式,我无法点击确认按钮,我不知道为什么。

感谢您的帮助。

 <t:layout t:pageTitle='${message:AddTickets}' xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"> 
     <t:jquery.jgrowl /> 
     <form t:type="form" t:id="dodajTiket"> 
      <t:zone t:id="zonaDjelovanja" id="zonaDjelovanja"> 
       <t:errors/> 
       <div class="palette palette-concrete" style="height:80%;"> 

        <div class="col-xs-12" style="margin-left:17px;"> 
         <h5>${message:selectTypeOfTicket}</h5> 
         <t:select t:id="drawTip" style="color:black;" validate="required" t:event="OsvjeziZonu" zone="zonaDjelovanja" /> 
        </div> 
        <!-- fecha del sorteo --> 
        <div class="col-xs-12"> 
         <div class="col-xs-3"> 
          <t:label for="datum"><h6>${message:datum}</h6></t:label> 
          <t:datefield id="uzmiDatum" validate="required" class="form-control" t:id="datum"/> 
         </div> 

         <!-- no de fracciones --> 
         <div class="col-xs-3"> 
          <div class="post-box"><label><h6>${message:numberOfTickets}</h6></label> 
           <input class="form-control" validate="required" t:type="TextField" t:id="brojTiketa" t:value="brojTiketa"/></div> 
         </div> 
        </div> 
        <div class="col-xs-12"> 
         <div class="col-xs-3"> 
          <div class="post-box"><label><h6>${message:number}</h6></label> 
           <input class="form-control" id="uzmiBroj" validate="required" t:type="TextField" t:id="broj"/></div> 
         </div> 
         <div class="col-xs-3"> 
          <div class="post-box"><label><h6>${message:serial}</h6></label> 
           <input class="form-control" validate="required" t:type="TextField" t:id="series" t:value="series" /></div> 
         </div> 

         <div class="col-xs-3"> 
          <div class="post-box"><label><h6>${message:price}</h6></label> 
           <input class="form-control" t:type="TextField" t:id="cijena" t:value="cijena"/></div> 
         </div> 
        </div> 
        <div class="col-xs-12"> 
         <br></br> 
         <br></br> 
         <div class="col-xs-3"> 
          <!-- 
          <t:submit value="Confirmar" t:event="dodajTiket" class="form-control" t:height="300" t:message="¿Seguro que desea crear esta entrada? ${kopijaBroj}" t:mixins="confirm"/> 
          --> 
          <t:zone t:id="zonaUploadovanja" id="zonaDjelovanja"> 
           <div t:type="jquery/dialog" t:zone="zonaDjelovanja" t:clientId="modal-example" class="k-modal" t:params="params"> 
            <div class="content"> 

             <p>¿Seguro que desea crear esta entrada? 
             </p> 
             ${brojTiketa} 
             <!-- 
              <script> document.getElementById('izmiBroj').value</script>--> 
             <p style="color:red; font-size: 25px;">6</p> 
            </div> 
            <t:submit t:event="OsvjeziZonu" value="Confirmar" class="form-control" /> 
           </div> 
          </t:zone> 
         </div> 
        </div> 
       </div> 
      </t:zone> 
     </form> 

     <t:jquery.dialoglink t:dialog="modal-example" class="k-modal-trigger">Open</t:jquery.dialoglink> 
    </t:layout> 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package rs.domaci.pages; 

import org.apache.commons.lang.StringUtils; 
import org.apache.tapestry5.ComponentResources; 
import org.apache.tapestry5.EventConstants; 
import org.apache.tapestry5.PersistenceConstants; 
import org.apache.tapestry5.alerts.AlertManager; 
import org.apache.tapestry5.annotations.Component; 
import org.apache.tapestry5.annotations.InjectComponent; 
import org.apache.tapestry5.annotations.OnEvent; 
import org.apache.tapestry5.annotations.Persist; 
import org.apache.tapestry5.annotations.Property; 
import org.apache.tapestry5.corelib.components.Form; 
import org.apache.tapestry5.corelib.components.Zone; 
import org.apache.tapestry5.hibernate.annotations.CommitAfter; 
import org.apache.tapestry5.ioc.annotations.Inject; 
import org.apache.tapestry5.json.JSONObject; 
import org.apache.tapestry5.services.ComponentSource; 
import org.apache.tapestry5.services.Request; 
import org.apache.tapestry5.services.ajax.AjaxResponseRenderer; 
import org.hibernate.Session; 
import rs.domaci.entities.Tiket; 
import rs.domaci.entities.TiketStatus; 
import rs.domaci.entities.TipDrawTiketa; 

/** 
* This page is for generating tickets! 
* 
* @author 
*/ 
public class AddTickets { 

    @Property 
    private String drawNumberOfTicket; 
    @Inject 
    private Session hibernate; 
    @Property 
    private int series; 
    @Property 
    @Persist(PersistenceConstants.CLIENT) 
    private String datum; 
    @Inject 
    private ComponentSource componentSource; 
    @Property 
    // price 
    private int cijena; 
    @Property 
    @Persist 
    private String kopijaDatum; 
    @Property 
    @Persist 
    private int kopijaBroj; 
    /** 
    * @Property private 
    */ 
    @Property 
    @Persist(PersistenceConstants.CLIENT) 
    private int broj; 
    @Property 
    @Persist(PersistenceConstants.FLASH) 
    private int brojTiketa; 
    @Property 
    private TiketStatus status = TiketStatus.DISPONIBLE; 
    @InjectComponent 
    private Zone zonaDjelovanja; 
    @Inject 
    private Request request; 
    @Inject 
    private AjaxResponseRenderer ajaxResponseRenderer; 
    @Inject 
    private ComponentResources componentResources; 
    @Property 
    @Persist(PersistenceConstants.FLASH) 
    private TipDrawTiketa drawTip; 
    @Inject 
    private AlertManager manager; 
    @Component(id = "dodajTiket") 
    private Form form; 

    // Generally useful bits and pieces 
    void setupRender() { 

     datum = null; 
     updateDisplay(drawTip); 
    } 

// public TipDrawTiketa getNAVIDENA() { 
//  brojTiketa = 20; 
//  return TipDrawTiketa.NAVIDENA; 
// } 
// 
// public TipDrawTiketa getCHANCES() { 
//  brojTiketa = 10; 
//  return TipDrawTiketa.CHANCES; 
// } 
// 
// public TipDrawTiketa getLOTERIANACIONAL() { 
//  brojTiketa = 20; 
//  return TipDrawTiketa.LOT_NAC; 
// } 

    public String getFormatirajMe() { 
     String prviDio = String.format("%03d", series); 
     String drugiDio = String.format("%02d", broj); 
     return prviDio + drugiDio; 
    } 

    public Object getOsvjeziZonu() { 
     if (drawTip == drawTip.LOT_NAC) { 
      brojTiketa = 20; 
      return zonaDjelovanja.getBody(); 
     } else if (drawTip == drawTip.CHANCES) { 
      brojTiketa = 10; 
      return zonaDjelovanja.getBody(); 
     } else if (drawTip == drawTip.NAVIDENA) { 
      brojTiketa = 10; 
      return zonaDjelovanja.getBody(); 
     } else { 
      brojTiketa = 10; 
      return zonaDjelovanja.getBody(); 
     } 
    } 

    @OnEvent(value = EventConstants.VALUE_CHANGED, component = "drawTip") 
    public Object updateDisplay(TipDrawTiketa tipDrawTiketaa) { 
     drawTip = tipDrawTiketaa; 
     if (drawTip == TipDrawTiketa.LOT_NAC) { 
      brojTiketa = 20; 
      return zonaDjelovanja.getBody(); 
     } else if (drawTip == TipDrawTiketa.CHANCES) { 
      brojTiketa = 10; 
      return zonaDjelovanja.getBody(); 
     } else if (drawTip == TipDrawTiketa.NAVIDENA) { 
      brojTiketa = 20; 
      return zonaDjelovanja.getBody(); 
     } else { 
      brojTiketa = 20; 
      return zonaDjelovanja.getBody(); 
     } 
    } 


    /** 
    * 
    * @return 
    */ 

    @CommitAfter 
    @OnEvent(value = "submit", component = "dodajTiket") 
    void onDodajTiket() { 
     for (int i = 0; i < brojTiketa; i++) { 
      hibernate.save(new Tiket(StringUtils.leftPad(String.valueOf(series + "" + broj), 5, ""), datum, drawTip, String.format("%03d", series), String.format("%02d", broj), status, cijena)); 

     } 
     String redom = "Created ticket sheet serial " + series + "\n" + " number " + broj; 
     //manager.alert(Duration.UNTIL_DISMISSED, Severity.INFO, redom); 
     componentResources.discardPersistentFieldChanges(); 
    } 

    @Property 
    private JSONObject params; 

    @OnEvent(EventConstants.ACTIVATE) 
    public void onActivate() { 

     params = new JSONObject(); 

     params.accumulate("modal", true); 


    } 
} 

enter image description here enter image description here

在这个形象,我曾尝试使用参数从现场Cantidad德Fracciones这是一个区域内,当页面加载它只会工作,cantidad de fracciones的值也会在对话框中更改,但这不是因为AJAX,我认为它可以从页面加载中获取Cantidad de Fracciones的值,并且在该页面停留期间无法更改,这不是什么我想要。当我改变字段Cantidad de Fracciones内的输入时,我希望更新对话框中Cantidad de Fracciones的值。

UPDATE:

因为它是所有客户端的东西,我选择使用jQuery方法,因为在兰斯Java的回答表明,听在某领域的文本改变。

<script> 
       $("input") 
         .keyup(function() { 
        var value = $(broj).val(); 
        $("#provjeraBroj").text(value); 
        var value = $(datum).val(); 
        $("#provjeraDatum").text(value); 
        //var value = $(drawTip).val(); 

        $('#drawTip').change(function() { 
         var $selected = $(this).find('option:selected'); 
         if ($selected.val() === 'LOT_NAC') { 
          $("#provjeraDrawTip").text("Loteri"); 
         } 
         if ($selected.val() === 'CHANCES') { 
          $("#provjeraDrawTip").text("Chances"); 
         } 
         else { 
          $("#provjeraDrawTip").text("Navideña"); 

         } 
        }).change(); 


        var value = $(series).val(); 
        $("#provjeraSeries").text(value); 
        var value = $(brojTiketa).val(); 
        $("#provjeraBrojTiketa").text(value); 
       }) 
         .keyup(); 
      </script> 
+0

你的“更新”确实应该是第二个答案。 – 2014-10-20 02:18:29

回答

2

确认mixin每次在客户端调用时都不会生成动态消息。该消息在服务器被确定为页面呈现(检查浏览器中的HTML源代码,您将看到该消息)。

因此t:message="¿Seguro que desea crear esta entrada? ${kopijaBroj}"将使用这些字段的初始值(空值和0)进行渲染。

如果您想根据当前字段值,我可以看到两个选项的动态消息:

  1. 使用JavaScript来与客户方的字段值每次显示消息的时间更换消息令牌。
  2. 每次执行服务器端往返渲染消息。这将要求使用请求参数将当前值传递给服务器端。

无论哪种方式,确认mixin不会开箱即用,所以您需要一个自定义混合。选项1将成为所有客户的更好用户体验。

+0

谢谢你的评论@Lance。我已经使用了方法1,这可以在我Q的更新版本中看到。为了帮助我指导寻找问题的方向,我选择了接受的答案。 – 2014-10-19 22:57:39