Re: Tapestry 5.4.1 Confirm mixin prevents onSuccessFrom... event from working

George Ludwig <[email protected]>
Newsgroups gmane.comp.java.tapestry.user
Message-ID <CAKHP1i5x+OFWPD=0SRnz1XvYDL_zVSk=Q3RUQVk4SFKEYtngAQ@mail.gmail.com>
I did some experimenting and discovered that the confirm mixin works fine
for things like an actionlink, but it doesn't work on a form button. Is
this intended behavior? I was able to hack around it by styling an action
link to look like a button and putting it outside of my form. In this case
works ok given that the only time I need a confirm dialog is for the Delete
action.

But I can't help but wonder if it isn't supposed to work on a form button...

On Fri, Nov 11, 2016 at 11:44 AM, George Ludwig <[email protected]>
wrote:

> Hi all,
>
> I've got a pretty simple test project in Tap 5.4.1. Everything works as
> expected, but when I add the built-in Confirm mixin to a component form,
> the onSuccessFrom... event does not work. The confirm dialog works as
> expected, but when I click ok, nothing happens (Other than the confirm
> dialog going away). I also tried a confirm mixin from 5.3.8, but that
> didn't work at all (no dialog box).
>
> Anyone else experienced this? Thoughts?
>
> EventEditor.tml:
>
> <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
> xmlns:p="tapestry:parameter" class="EventEditor">
>
>
> <form t:id="eventForm" >
> <t:errors />
> <div class="t-beaneditor">
> <t:beaneditor t:id="eventEditor" t:object="event"
> t:model="eventModel">
> <p:name>
> <t:label for="name" />
> <t:textfield t:id="name" value="event.name" t:size="16"
> t:mixins="TextboxHint" t:hintText="Event Name" t:hintColor="#d3d3d3" />
> </p:name>
> <p:defaultPhoneNumber>
> <t:label for="defaultPhoneNumber" />
> <t:textfield t:id="defaultPhoneNumber" value="event.defaultPhoneNumber"
> t:size="16" t:mixins="TextboxHint" t:hintText="Default Phone Number"
> t:hintColor="#d3d3d3" />
> </p:defaultPhoneNumber>
> <p:start>
> <t:label for="startDate" />
> <t:datefield t:id="startDate" value="event.startDate" />
> </p:start>
> <p:end>
> <t:label for="endDate" />
> <t:datefield t:id="endDate" value="event.endDate" />
> </p:end>
> </t:beaneditor>
> </div>
> <div id="buttons">
> <span id="saveBtn" onClick="showMsg();">
> <input fwtype="btn-primary" t:type="submit" value="Save" t:id="save" />
> </span>
> <span id="deleteBtn" onClick="showMsg();">
> <input fwtype="btn-primary" t:type="submit" value="Delete"
> t:id="delete"  t:mixins="Confirm" Confirm.message="Are you sure? This will
> delete this event and any other data associated with it!"/>
> </span>
> </div>
> </form>
>
> </div>
>
>
> EventEditor.java
>
> package com.hightechknowledge.components;
>
> import org.apache.tapestry5.annotations.Component;
> import org.apache.tapestry5.annotations.Parameter;
> import org.apache.tapestry5.annotations.Persist;
> import org.apache.tapestry5.annotations.Property;
> import org.apache.tapestry5.beaneditor.BeanModel;
> import org.apache.tapestry5.corelib.components.Form;
> import org.apache.tapestry5.ioc.Messages;
> import org.apache.tapestry5.ioc.annotations.Inject;
> import org.apache.tapestry5.services.BeanModelSource;
>
> import com.georgeludwigtech.CEUPDQ.data.Event;
> import com.hightechknowledge.helpers.EventDisplayWrapper;
> import com.hightechknowledge.services.EventDAO;
>
> public class EventEditor {
>
> @Inject
> private EventDAO eventDAO;
>
> @Component(id = "eventForm")
> private Form eventForm;
>
> @Property
> @Parameter
> private String eventId;
> @Parameter
> private Object returnPage;
>
>
> @Inject
>     private BeanModelSource beanModelSource;
> @Inject
>     private Messages messages;
> @Property
>     private BeanModel<EventDisplayWrapper>eventModel;
> @Persist
> private EventDisplayWrapper event; // the current event being viewed/edited
> void setupRender() throws Exception {
> eventModel = beanModelSource.createDisplayModel(EventDisplayWrapper.class,
> messages);
> eventModel.include("name", "defaultPhoneNumber", "startDate", "endDate");
> if(eventId==null&&event==null) {
> createNewEvent();
> eventId=event.getEventId();
> } else if(event==null) {
> Event e=eventDAO.findById(eventId);
> event=new EventDisplayWrapper(e);
> }
> }
>
> public EventDisplayWrapper getEvent() {
> if(event==null)
> setEvent(new EventDisplayWrapper());
> return event;
> }
>
> public void setEvent(EventDisplayWrapper event) {
> this.event=event;
> }
>
> @Persist
> private boolean save;
>
> void onSelectedFromSave() {
> save = true;
> delete = false;
> }
>
> @Persist
> private boolean delete;
>
> void onSelectedFromDelete() {
> delete = true;
> save = false;
> }
> void onConfirm() {
> return;
> }
>
> Object onSuccessFromEventForm() throws Exception {
> if (save)
> saveEvent();
> else if (delete) {
> deleteEvent();
> return returnPage;
> }
> return null;
> }
>
> private void saveEvent() throws Exception {
> //
> Event e=new Event(event);
> eventDAO.update(e);
> }
>
> private void deleteEvent() throws Exception {
> //
> eventDAO.delete(event);
> event=null;
> eventId=null;
> }
>
> private void createNewEvent() throws Exception {
> //
> Event e=eventDAO.createNew();
> e.setName("A New Event");
> e.setStart(System.currentTimeMillis());
> e.setEnd(e.getStart()+86400000);
> e.setDefaultPhoneNumber("123 555 1212");
> eventDAO.update(e);
> EventDisplayWrapper edw=new EventDisplayWrapper(e);
> setEvent(edw);
> }
>
> }
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.