hello alexander,

you have to use the ppr mechanism of trinidad.

you'll find more details at:
http://myfaces.apache.org/trinidad/devguide/ppr.html

regards,
gerhard



2008/1/3, Alexander Pohl <[EMAIL PROTECTED]>:
>
> Hi all,
>
> I am quite new to Trinidad and JSF and have the following problem: in a
> page I list some entities from a
> TrinidadEntityQuery. The page displays a commandlink to let the user
> delete one of those entities. The
> deletion shall be confirmed by the user by clicking 'Ok' in a popup
> dialog. The dialog then passes back
> the enity's id to the main page's backup bean which has a return
> listener method. All works fine BUT the
> main page is not re-rendered after the deletion of the entity, so the
> entity still is displayed. In my application
> there are other usages of popups to update entites in quite the same way
> (main page listing enitity, popup
> editing entitiy, main page shows changes after popup has closed), so I
> really have no clue why in this
> case nothing happens.
>
> The table and commandling portion of the main page 'enginetypes.xhtml'
> looks like this:
>
>                 <!-- Table -->
>                 <tr:form>
>                     <tr:table var="engineType"
> value="#{engineTypeHome.entityQuery.dataModel}"
> rows="#{engineTypeHome.entityQuery.maxResults}" rowBandingInterval="1"
> width="100%">
>                         <f:facet name="header">
>                             <tr:outputText value="Engine Types"/>
>                         </f:facet>
>
>                         <!-- the edit button, redirects to this page
> with the currently selected engineTypeId -->
>                         <tr:column inlineStyle="width:4em">
>                             <f:facet name="header">
>                                 <tr:outputText value="Edit"
> styleClass="columnUnsortableHeaderText"/>
>                             </f:facet>
>                             <s:link view="/enginetypes.xhtml">
>                                 <f:param name="engineTypeId"
> value="#{engineType.id}"/>
>                                 <img src="images/edit.gif"
> alt="#{engineType.id}" style="border:0"/>
>                             </s:link>
>                         </tr:column>
>
>                         <!-- the delete button, calls the
> engineTypeHome's remove method -->
>                         <tr:column inlineStyle="width:4em">
>                             <f:facet name="header">
>                                 <tr:outputText value="Delete"
> styleClass="columnUnsortableHeaderText"/>
>                             </f:facet>
>                             <tr:commandLink
>                                     action="dialog:deleteEntity"
>                                     immediate="true"
>                                     partialSubmit="true"
>                                     useWindow="true"
>                                     windowWidth="650"
>                                     windowHeight="300"
>
> launchListener="#{engineType.addConfirmDeletionParams}"
>
> returnListener="#{engineTypeHome.handleConfirmDeletionDialogReturn}">
>                                 <img src="images/delete.gif"
> alt="#{engineType.name}" style="border:0"/>
>                             </tr:commandLink>
>                         </tr:column>
>
>                         <!-- the first (and only) column displays the
> engineType's name -->
>                         <tr:column sortable="true"
> sortProperty="upper(engineType.name)">
>                             <f:facet name="header">
>                                 <tr:outputText value="Name"
> styleClass="columnSortableHeaderText"/>
>                             </f:facet>
>                             <tr:outputText value="#{engineType.name}"/>
>                         </tr:column>
>                     </tr:table>
>                 </tr:form>
>
> This is the code of the backing bean 'EngineTypeHome.java':
>
> @Name("engineTypeHome")
> @Scope(ScopeType.CONVERSATION)
> public class EngineTypeHome extends HomeBase<EngineType> {
>     private TrinidadEntityQuery engineTypesQuery;
>
>     @In
>     private EntityManager entityManager;
>
>     public EngineTypeHome() {
>         super("engineTypeId");
>     }
>
>     @Factory("selectedEngineType")
>     public EngineType init() {
>         return getInstance();
>     }
>
>     @Override
>     public boolean checkRemovable() {
>         EngineType engineType = getInstance();
>         return checkRemovable(engineType);
>     }
>
>     public boolean checkRemovable(EngineType engineType) {
>         long usageCount = (Long) entityManager.createQuery("select
> count(event) from Event event where event.engineType = :engineType")
>                 .setParameter("engineType", engineType)
>                 .getSingleResult();
>
>         if(usageCount > 0) {
>             FacesUtil.error("Cannot delete engine type '" +
> engineType.getName() + "'. There are events for this engine type.");
>             return false;
>         }
>         return true;
>     }
>
>     @Override
>     public EntityQuery getEntityQuery() {
>         if (engineTypesQuery == null) {
>             engineTypesQuery = new TrinidadEntityQuery();
>             String ejbql = "select engineType from EngineType engineType";
>             engineTypesQuery.setEjbql(ejbql);
>             engineTypesQuery.setMaxResults(15);
>             engineTypesQuery.setOrder("engineType.name");
>         }
>         return engineTypesQuery;
>     }
>
>     @Transactional
>     public String handleConfirmDeletionDialogReturn(ReturnEvent
> returnEvent){
>         Long engineTypeId = (Long) returnEvent.getReturnValue();
>         if (engineTypeId != null){
>             // load the entity from the database
>             EngineType engineType = entityManager.find(EngineType.class,
> engineTypeId);
>
>             // make sure it has been loaded (no locking currently
> activated!)
>             if (engineType == null){
>                 FacesUtil.error("Cannot delete engine type. It may have
> been deleted in the meantime.");
>                 return null;
>             }
>
>             // actually remove it
>             if (checkRemovable(engineType)){
>                 entityManager.joinTransaction();
>                 entityManager.remove(engineType);
>                 entityManager.flush();
>             }
>
>             getEntityQuery().refresh();
>             FacesContext.getCurrentInstance().renderResponse();
>         }
>         return "removed";
>     }
>
>     /**
>      * Calls the super save method and refreshes the entity query.
>      * @return The navigation outcome of HomeBase.save().
>      */
>     @Override
>     public String save(){
>         String outcome = super.save();
>         if (engineTypesQuery != null){
>             engineTypesQuery.refresh();
>         }
>         return outcome;
>     }
> }
>
> The confirmation dialog page 'delete-entity_dlg.xhtml' looks like this:
>
> <?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
> <html xmlns="http://www.w3.org/1999/xhtml";
>       xmlns:ui="http://java.sun.com/jsf/facelets";
>       xmlns:f="http://java.sun.com/jsf/core";
>       xmlns:s="http://jboss.com/products/seam/taglib";
>       xmlns:tr="http://myfaces.apache.org/trinidad";
>       xmlns:trh="http://myfaces.apache.org/trinidad/html";>
>     <head/>
>     <body>
>         <ui:composition template="popup_template.xhtml">
>             <ui:define name="main-content">
>                 <script type="text/javascript" xml:space="preserve">
>                     // <![CDATA[
>                     _pprUnsupported = false;
>                     // ]]>
>                 </script>
>                 <tr:form defaultCommand="okButton" styleClass="noprint">
>                     <tr:panelFormLayout>
>                         <tr:outputText inlineStyle="font-size:0.8em"
>                                        value="Please confirm the
> deletion of the #{deleteEntityBackingBean.userPrompt}"/>
>                         <tr:messages globalOnly="true"/>
>                         <tr:panelButtonBar>
>                             <tr:commandButton id="okButton"
> styleClass="okButton"
>
> action="#{deleteEntityBackingBean.ok}"
>
> rendered="#{deleteEntityBackingBean.initOk}"/>
>                             <tr:commandButton id="cancelButton"
> styleClass="cancelButton"
>
> action="#{deleteEntityBackingBean.cancel}"
>                                               immediate="true"/>
>                         </tr:panelButtonBar>
>                     </tr:panelFormLayout>
>                 </tr:form>
>             </ui:define>
>         </ui:composition>
>     </body>
> </html>
>
> And here is it's backing bean 'DeleteEntityBackingBean.java':
>
> /**
> * Backing bean for the dialog page delete-entity_dlg.xhtml.
> */
> @Name("deleteEntityBackingBean")
> @Scope(ScopeType.CONVERSATION)
> public class DeleteEntityBackingBean {
>     // the message displayed to the user
>     private String userPrompt;
>
>     // the entity to be deleted
>     private Long objectId;
>
>     // if false, an initialization error occurred (missing dialog
> parameter)
>     private boolean initOk = true;
>
>     @Logger("etd.edit")
>     private Log log;
>
>     @In(create = true)
>     private EntityManager entityManager;
>
>     public DeleteEntityBackingBean() {
>     }
>
>     @Create
>     @Begin
>     public void create() {
>         // get the dialog startup parameters
>         RequestContext requestContext = RequestContext.getCurrentInstance
> ();
>         objectId = (Long) requestContext.getPageFlowScope
> ().get("objectId");
>         userPrompt =
> (String)requestContext.getPageFlowScope().get("userPrompt");
>
>         if (objectId == null) {
>             FacesUtil.error("Internal error: no object to be deleted!");
>             initOk = false;
>         }
>     }
>
>     @Transactional
>     @End
>     public String ok() {
>         // close the dialog returning the id
>         RequestContext.getCurrentInstance().returnFromDialog(objectId,
> null);
>     }
>
>     @Transactional
>     @End
>     public String cancel() {
>         // close the dialog returning null
>         RequestContext.getCurrentInstance().returnFromDialog(null, null);
>     }
>
>     public String getUserPrompt() {
>         return userPrompt;
>     }
>
>     public boolean isInitOk() {
>         return initOk;
>     }
> }
>
> There is a navigation rule for the dialog in the faces-config.xml:
> ...
>         <navigation-case>
>             <from-outcome>dialog:deleteEntity</from-outcome>
>             <to-view-id>/delete-entity_dlg.xhtml</to-view-id>
>         </navigation-case>
> ...
>
> Any help appreciated,
> Alexander Pohl
>
>
> --
> ------------------------
> Alexander Pohl
> ------------------------
> Think Applications GbR
> Zionskirchstrasse 73
> D-10119 Berlin
> ------------------------
> Phone  +49 30 4171 4624
> Fax    +49 30 4171 4625
> Mobile +49 173 211 2864
> ------------------------
> mailto:[EMAIL PROTECTED]
> ------------------------
>
>


-- 

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces

Reply via email to