{"id":1687,"date":"2014-09-30T17:30:03","date_gmt":"2014-09-30T15:30:03","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=1687"},"modified":"2014-09-30T17:55:17","modified_gmt":"2014-09-30T15:55:17","slug":"xpages-execute-events-with-http-get","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=1687","title":{"rendered":"XPages: Execute Events with HTTP Get"},"content":{"rendered":"<p>To execute an event on the server, you normally have to send a POST request, because actions will be executed in the <em>Invoke Application<\/em> phase of the JSF lifecycle. A GET request will only process the <em>Restore View<\/em> and the <em>Render Response<\/em> phase, that why you can not execute an event with a GET request.<\/p>\n<p>But with the help of a <em>PhaseListener<\/em>, the execution can be done earlier in the <em>Restore View<\/em> phase:<\/p>\n<pre><code>package ch.hasselba.xpages.util;\r\n\r\nimport javax.faces.event.PhaseEvent;\r\nimport javax.faces.event.PhaseId;\r\nimport javax.faces.event.PhaseListener;\r\nimport com.ibm.xsp.component.xp.XspEventHandler;\r\nimport javax.faces.context.ExternalContext;\r\nimport javax.faces.context.FacesContext;\r\nimport com.ibm.xsp.util.FacesUtil;\r\n\r\npublic class ExecuteOnServerPhaseListener implements PhaseListener {\r\n\r\n\u00a0\u00a0 \u00a0private static final long serialVersionUID = 1L;\r\n\r\n\u00a0\u00a0 \u00a0public void beforePhase(PhaseEvent event) {}\r\n\r\n\u00a0\u00a0\u00a0 public PhaseId getPhaseId() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return PhaseId.RESTORE_VIEW;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 public void afterPhase(PhaseEvent event) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0FacesContextExImpl = FacesContextExImpl.getCurrentInstance();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ExternalContext ec = fc.getExternalContext();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0String url = ec.getRequestPathInfo();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0String[] pathes = url.split( \"\/\" );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0try{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( pathes.length &gt; 2 ){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( \"executeOnServer\".equals( pathes[pathes.length -2 ] ) ){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0String[] fullId = pathes[ pathes.length - 1 ].split(\":\");\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0String actionId = fullId[ fullId.length - 1 ];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0XspEventHandler eventHandler = (XspEventHandler)\r\n                        FacesUtil.findComponentWithFullId( fc.getViewRoot(), actionId );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( eventHandler != null ){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0eventHandler.getAction().invoke( fc, null );\r\n                        fc.responseComplete();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0            }\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}catch(Exception e){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0e.printStackTrace();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 }\r\n\r\n}<\/code><\/pre>\n<p>To activate the <em>PhaseListener<\/em>, it has to be enabled in the <em>faces-config.xml:<\/em><\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;faces-config&gt;\r\n   &lt;lifecycle&gt;\r\n      &lt;phase-listener&gt;ch.hasselba.xpages.util.ExecuteOnServerPhaseListener&lt;\/phase-listener&gt;\r\n   &lt;\/lifecycle&gt;\r\n&lt;\/faces-config&gt;<\/code><\/pre>\n<p>The following Javascript snippet extends the XSP object and adds the new function <em>executeOnServerGet<\/em> to it. The parameter is the if of the event to invoke.<\/p>\n<pre><code>XSP.executeOnServerGet = function( eventId ){\r\n    var viewId = dojo.query('[name=\"$$viewid\"]')[0].value;\r\n\u00a0\u00a0 \u00a0var url = document.forms[0].action;\r\n\u00a0\u00a0 \u00a0url += \"\/executeOnServer\/\" + eventId;\r\n\u00a0\u00a0 \u00a0url += \"?$$viewid=\" + viewId;\r\n\u00a0\u00a0 \u00a0url += \"&amp;$$ajaxid=@none\";\r\n\u00a0\u00a0 \u00a0dojo.xhrGet({url: url});\r\n}\r\n<\/code><\/pre>\n<p>When calling the function, it sends a GET request and adds the current view id to the request. With the parameter <em>$$ajaxId<\/em> set to <em>@none<\/em>, the XPages Engine is forced to send no HTML code back to the client.<\/p>\n<p>And here is an example XPage:<\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n\r\n\u00a0\u00a0 \u00a0&lt;xp:eventHandler id=\"helloworld\" event=\"helloworld\" submit=\"false\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:this.action&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;![CDATA[#{javascript:\r\n               print(\"hello world \" + java.lang.System.currentTimeMillis() );\r\n            }]]&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/xp:this.action&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/xp:eventHandler&gt;\r\n\r\n\r\n\u00a0\u00a0 \u00a0&lt;xp:scriptBlock id=\"scriptBlock1\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:this.value&gt;&lt;![CDATA[\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dojo.addOnLoad( function(){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0XSP.executeOnServerGet = function( eventId ){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var viewId = dojo.query('[name=\"$$viewid\"]')[0].value;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var url = document.forms[0].action;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0url += \"\/executeOnServer\/\" + eventId;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0url += \"?$$viewid=\" + viewId;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0url += \"&amp;$$ajaxid=@none\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dojo.xhrGet({url: url});\r\n\u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0});\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0]]&gt;&lt;\/xp:this.value&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/xp:scriptBlock&gt;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0&lt;xp:button value=\"Execute\" id=\"button1\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:eventHandler event=\"onclick\" submit=\"false\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:this.script&gt;\r\n                &lt;![CDATA[XSP.executeOnServerGet( \"#{id:helloworld}\" );]]&gt;\r\n            &lt;\/xp:this.script&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/xp:eventHandler&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/xp:button&gt;\r\n&lt;\/xp:view&gt;<\/code><\/pre>\n<p>When clicking the button, the following URL is opened in the background:<\/p>\n<pre><code>http:\/\/example.com\/db.nsf\/EventGet.xsp\/executeOnServer\/view:_id1:helloworld?$$viewid=!dwjldz64w0!&amp;$$ajaxid=@none<\/code><\/pre>\n<p>A GET request was sent to the server:<img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcUAAABvCAIAAAASU0zvAAAQBklEQVR4nO2dTXMbRRrH+7P4oDNy6RtQuzd9A6QUNZf9AqriQpEUsXPS1cWBxFXUHsBOlqVYbSALqywQEmL5JcGsUjIhi3mzFoU4IRsIDpk9TE\/P093PzLSkljxS\/r96yiX1dPc8\/fTM390zox5x+frn2fbuPz65\/NnnMBgMBss2cfmzm9n2wZXtY\/cSBoPBim+ife0mDAaDwcY38c9rN2AwGAw2vok31t6BwWAw2Pgmfsqj0+lsAwAAyMNJT0MAAAB5QE8BAMAP0FMAAPAD9BQAAPwAPR2XViCEEEHLVz6S073ICHCVT3SHM+AJAOPhU087t745de7SS6+1qJ089\/7V3f+klOg1K4IStOIzKabSbGrf49RepidRvXm5hoat1jzz0\/Y9W3pKe0FrSytgHGITPXmSWUhYuWS6e5xJdq3raASY2kaPwxz+q+i3V05KVtr9MAzDcHddJqzvykx2CltBXEO\/vRLXFRVlihUPn3p66tylh788fvr06ZOjo8e\/Pnr44N69u\/2vv\/7q5Ln3uewpR37K4TYhiRwf4i85BWdfT6nERNn0\/36yJJvo0xPXEmSDiyPJ8WR+Srqy0uxx+5pUHGaX3fVY7HbXT660++HuupS\/fnsl+mSnKPrtFSXDkXautPuJnuqbC45PPX3ptdbvT5789vjXRw8f3L\/346D\/7Q\/f3N7\/6t8vvcYcXan6OJye0vM9Lltp9mgl5lCLPWt6zYoQlWYrW7V57dT9VT4Ybsv0SsUQXHskyOkpPV0Th1Na0WPyE1dagRBBy6UtxJm4dKsZRE62WkmVNDGlR\/iA5kfVSBFBK\/XQ6TUrQgSBqs21o1V9ZoEkLdmZcxxMiaV9qznIZaCOZUSueEQqqMRTDTPtFIWUYLMO9Xd2xDT0rqe\/PHr44P7duz9+f\/DdnW\/v3LrTu9H74jqrp\/lDDP1EdNFfc7oan3t0BhefIomy0mw5o2BO6cyG5OipPuTh3GP2wu0uoxW8e9KViszt0hazbiFEpRIk0WETMyscNaq0\/w2Jpf8umH9C+R3N6SkVO03Ch4hDyDnPx8TOEA8KKs3M2BUMWz3lZzvFKELZXT+5vttvr6yszJaYht719N7dvtC5udHO0VPyX1qTQp10pdMVRj8dzQu05LyNNgZBoA5d90tf9vA3TU+5Bpses+7RD9ou9K1sK\/j8+sAxvy0yv2qJ4ax2PUBP5HpkvKjSr+lSaClxeojYSkJ1GGj\/e9RwNqPJbCI7AGXaYmQgybN13UCNND3p6cmVdtscvBYcz3oaTfBv39q+dfPa55v\/2r566fpH77rM95mhZWZ+e1PQNMd6ZJZqlGoF8k5XdIZVgqDidOxORk\/NvI56mt6KLD21Ip6jp2ZUes1A3iKs0PGZnsj0yBhRNf4R2Iop92QQCyQbomw9JVuN\/\/ZDxIHuIrnekNIhNMMwl4GLA522+5vvc9dbi4xnPb3Tu9Hbvf7F9sc7n32w8cnfr7b\/euWDC6yeGvejxtFTcszH2w1JsqqTydoELjl7cuf71pngPN9nr0sY7rnN9zNakTnfN\/U0qy2aVy0pbgEZrbGJXI8Yc2pNbrI9YbokER\/GYT0pNUTc\/SizEs13FXTXOJA6+Pl+ZoZ4+0zM962rnD7vR83UDSmfevrK2fd2Nq\/c3GhvXnnv2uV3Pv3wLx9fWvvw4vrLr19MKWHMkpirY8YUKE3pTF3Km1PRIQ89d1yvn7JPemXfO0m7OGi7x8koc38pvRV8\/tQZAduWlCm3UWdKZ9k94qKnnCfWFRGt\/8yd2m5nhIg6n3YlQe0jfmrPfH4vMw4qNbpwYM\/37QzaWHxW7kfRp53iB55Gf15KbtaGsbHIFh6fenp1984rZ98znj99+fWLH+18OdE2gCnS8v\/86UwychzMqxdgnsDvo1jMkSY7EnomgZ5GjBIH7ZEBMI9ATwEAwA\/QUwAA8AP0FAAA\/CDu5XH79u3cPAAAAJzGp7l5AAAAOOnpdwAAAPJw0tPvAQAA5OGkpz9MgIODg\/39\/V6v150X9vb29vf3Dw4OJhEuAEDxcdLTA9\/0+\/29vb3BYHB0dHTcd+S8cXR0NBgMer2e93ABAGYCJz3t+2Z\/f38wGBy3AE6EwWCwv7\/vPWIAgOJzPHra6\/XmaWRKOTo62tvb8x4xAEDxcdLT\/\/qm2+0et+5NkG636z1iAIDi46SnP\/pm7vXUe8QAAMUHeuof6CkAzyZOejrwzdzrqfeIAQCKj5Oe3vXN3Oup94jZvPmCEEK88OYUdgX8UcBu23j1OSHEc69uHLcjc8Dx\/H6f11NjEefjWb456xVKjnS7Xb7Zb0Xn0lvct6EZs7hT7fn1+\/VitNo2TpeFEKJ8eiOpo3x6QybH6WpTlDCu43GA3MJklvPfbaP681McvyRMaWkgHyc99b4KS5ae5r8ZbqL40VO+2Ws1IYSorXHfhmbM4i6VR+KT2f1+vRi5tqTgWi2uoRNJQrksm9A5XS6Xy3GTxnI8KpwTmjxPPTKGP\/dUoEYsDShOenrom3w9NV7bZoxZ1dZWYL+0Tc9TSV4xkbz9zHovb5yoD5Gtl+wZvkV75\/SUb3Z8LjHfEgETory0eXh4uLlUFmaakTG\/eHlpc62W7NIRWbZWK5M9y3O2XCZ70Z2JttXW4szlpU1ZV\/JJb47uZE2rbUifIx1dWiqrknHlSzVRWzs83FwqR5up60PuRAtP3CNaqtVfZtdwYWSyje8PG\/DsXlBeKD+j+HC+jeHvPFNQPeXeM2q9FF1qJVU0+8Xp5LWZ3PuT6TsnmTcQs3lS9+6mpzryVFcHZaJECut4TyQrvbgsFJ23w8mG2p92okohSPXikDgiT9raWpKU7jlxcgyRo1pgNGOtJmprazVRW+MjOdqO0otae1G6VVN6qruQcwCM5A8b8Kxe4DSU9iDxLU3BgZOe3veN0\/VT45W\/ElMrc\/JY6qz00noTsXyTevq7nIVeMvWaQLfb5Zu9XhdCiPq68W1LG9kIlWfLGPFsaRXkFJep8c6GYEueLFvaR7pv\/mP8rb6+tVQW9XpdlJe2ZIqez3RdOanXNorbsbdaO7YiSdii7RljV2lFs\/vLLpx7AIzjDxvwrF6Q10Li6MVbWd9ooioB7t+\/76SnD3yTP99nBpxkEKkPX3PzZOipddOL0VMzT0pJqqd8s89Hx+h549v2clkIUV7epnlp4vm6\/EgryC6ekupAVK9xBp3XnOc\/xoXLy8t1UV7ePl8X5Xq9bJXOcN2obQiimurLy2VVHxMBkjT6rkbsL7uJOT04nj9swLN6IZ4myHriram+0eNkpDDOJU56+rNv3PWUvwagK1puHlZP4+GwMczU5\/tsHgc95ZsdH6PmN3loxhvI1sXlnZ9\/3llelB+TT3nFtazDQPabVCPq56nz\/EdSnDhru0s+mk6atbnCRoiJAEkadVdckIwkay8y485yfXmHjQPbg+P5wwc8uxdkj+nxyfYtKjKy43OHk54+9I27npKrANEFS\/byak4eXk9D9jIBTQtabB4HPeWbfeGEEEKcuMB8u3Fmkexl8cyNeLsQYnFxMU4z8mUUj1KiQkMQ7ZQUkzWfuEDcpZ6TPZ+4QLLbdVEfZaLlpFGbG3SfKmwnLjARIEkquppDwwaKOsv2l55x8cyNlDByB8CY\/nABz+uFeKvW3bZvWsLwvs4xRdLTeSFVTwEAc42Tnv7PN3Ovp94jBgAoPk56+sg3c6+n3iMGACg+Tnr6i2\/mXk+9RwwAUHyc9PRX38y9nnqPGACg+Djp6WPfzL2eeo8YAKD4eNDT0d6ufNyiN0FGCwgAYNZx0tPfMunOtTgCAIAj0FMAAPCDk54eZQI9BQCA0FFPn2QCPQUAgNBRT3\/PBHoKAACho54+zQR6CgAAoaOeZlcBPQUAgBB6CgAAvoCeAgCAH6CnAADgB+gpAAD44RnSU\/3NUAAA4Jmp6WkrYKSMTWQyDauD7BuehqpntRq9HKfUyGk9AABIpqGn+hvt2FfhTWPUOISerlZFdVV+kh8AACCHietpPFRsNYPo\/aKtVkoi+7ZR9ebSoJWVQXs1aaXZI9qpanBXbimi0Rg10tPVqhClarVkjlo7jVJcs1LgvJwY8wIwn0xJT4WoVIJk+s0mWoXkfJ0bV9oZYhE13gptCauznq5WS40OGZ92GqVEMqUkJuPYMOw0SjI1L6dKBADMFVOY7+ujSilobCI7ANV0kM1AkmO1jMvQskPraXU11PS0Gqtg\/JEkqWJpOUuCAkEFYA6Z2v2oXjNoNgNNBY1EOuYkQ81EB9MyGFcFaJkx9FRpoBRURiX1q6sqlc8JCQVg3pm8nkbXRsNeM2i2mhWpaFwiuRLKz\/czM8Tb9fm+JcGu96NM9ZP3+6MhayKz2rgzudLK5FRPDFCNBgDME1PQU+1+kKaR5rxdpVYq\/PVTO4Oc6WtXA7T7UcaFBccnCRKdhPIBABwp\/vOnmmICAEBhKbSeJmNLqCkAoPA8Q783BQCAiQI9BQAAP0BPAQDAD9BTAADwwzOkp1ivDwAwUaajpyM+LMUuu+fC+Ov1heFqNeVXoZ1GyeWx1E6jRDMZv7YarU71mwAt62p1mLJGztRmAgCGZWrroWjPPU1\/sb5waD019FBj5FX8Mgrm1dlplDjl6zRKpUYj1x\/1iy+zWVnNBAAMxWT11HmxPv2hffXDUvvn98kPqnrqx6vkh6a9ZsXDen1hGDJCQwaH8VopQqilTcgX8stSU6pM0bTqDM21U+L8vNxKJ9XGdJfIOljaIi7QUwC8MQ09dVqsj11YT18KxVieT6UlYqySxluvLwxDU2iS1fjo3JxfD0Vha6BRgKszZQ2V1UajYb4zQLlIquVd0vTUvA4BPQXAD5Oe77sv1mcsI6VJoPkjfKKV0cYgCNSwlArxaOtLRWjKpEujtjJfrIWrDXM2nqOnfJ0R5uyefqeLqloDWd6l9PEp3kAAgDemcz8qf7G+MFbZoGkORY1logitQIhKsxlLaSUIKoYQj6OnGmQsSdeL7jQajUjAqiV7nOc+PqV1pgyAyWjVUm5aLe9SUgT6CcCkmLCeOi\/WFyXEo1B9wSk1bbfEUCaTSb+f9fpC7o57MhqsVqvxrFvdHudkSlNDbXSdDDWtOo2lp7XxrFE6cZQm8i7xhV0fLAAAODBpPXVfrI9sUZqXtzQ\/vY1FXyRFCo62Xp8X7AuqAIB5ptDPn84mZMy5ety+AACmCPQUAAD88Az93hQAACYK9BQAAPwAPQUAAD9ATwEAwA\/QUwAA8AP0FAAA\/AA9BQAAP0BPAQDAD9BTAADwgx89BQAA4EFPAQAAhF7GpwAAAELoKQAA+AJ6CgAAfhB\/+\/BTGAwGg41v4trNL2EwGAw2vkFPYTAYzI9BT2EwGMyPQU9hMBjMj0FPYTAYzI\/NjJ6+feqPCwsLCwsLz5+6fOzOwGAwmG2T19OLZ55fWFj4w5m32a1n\/xSp5Itns+v584sZlcBgMFgB7P+jsYoJgBrptgAAAABJRU5ErkJggg==\" alt=\"\" \/>If you look on the server console, you will see that the Action was invoked:<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlwAAAAgCAIAAABIATF0AAAGrUlEQVR4nO2cwZLkNgxD\/bO5556f8xfMZ2xqz8l5Koc4XW6TBAFJ7p7s4J26ZQoEIWe1VUl6+\/jz8+ffn7\/9\/sdmjDHGfHN8KRpjjDEHvhSNMcaYg8uluJ941OzPRBFQnzYFj2IZ74dZb5ued2FjrT7ITbI0oN\/qzOQz5ofPs+0OmjJSd+TJrC\/hLBs\/x9bqetv6prlewNf0\/wUtfXfSS\/FccFkBfwTEgvSwyZeg6juzzr98oJKct82N9DOjD3oN5zPmh8+T7642mvE\/psPPxQN6bc\/HitdVq3fPdTfY\/6pxxnT+j3n+ykiX4v4fl6fVoVZqYL3tO7+O4uAmYubFufF+ZvTx3pl8eD8zeTKVl5X0a1XA58nrAG9LwH0lJ8wIY8Uvg3x5Nuh\/1TjDOl8nT7NtyqW4n0gfRfHq5au6gOK4l1wHfgB4OzPvWj9j+sB8Ost9fsbyxB2ZApyM6p\/RkdwOgM9LciIdfTs+SKxqVG1hdOJTDE4Gt+bn4nXilnYE8yKkS3ELf3bgXfHNqOojbV9yPTWwZS9x5ZbxDxQqP2QOM\/ppr1hfhcBYIv2oeZJNpae4WM0TN1XD5NkDrZnWJGm17QgivXzGexmdAartrSbppxUn5zVvhrwU4zu9Z1zE48HjerUvs17NhcE5qPNWBmZcMfqVfzDggBNGfyxPpu9r\/A\/4US2RnDX5Q0zXx+ylJ5seYppn5V\/VGUYNjfcDQo467UbzNvhLsSqoFqV1\/OZt4R8qfh3YAOAtzFwzuTF9Gf24F9TzZsAslf5YnnwlXmcmZfyriannyzB2iGDkyb5ApG06o3N+xEzRHu5kPaND6ps3M\/9fn276i151AY0eX2fW+ZcPVzLzqrnN9Kq+MnliJ1hH9cPMiME+7\/av6vBz8WB9KR\/J3sC87aEweWKfUUf1f\/66ZC5SB+ibNzP\/\/ynGR6C4fVpVMn7S9T0gNZ2ZF+jwfib1mXrgBBS3j9p6KQqs024f9j+pw1iSiNm2fVeZXKifrt8dJpDCc50NM3Mx+VT65v34F22MMcaYA1+KxhhjzIEvRWOMMebAv30KuqvOwb82INeBLBZZlWcrMuxHyg13B00ZKVzJO6nq1TzVdg\/Z+Dm2VtdJA48t2E9qe2BeaW811K3nMgD2M3AuuFFbz+QWz5SvT\/3sGQv1gU6Jf\/uU6X5xDk6iygoI8k6AYCu1Kp8xP0AZRNpOITVqPTPbJT+qmtrx8nl7Pla8PmOVeQfOxyodMW43v+uOQ5kB+OGttiLte86c6fb8Ikn1lZ9X6rN5fvzwb58mnpkc8C4wDl5svVWfsdTafHg\/VZ6XSrJvlTz+WhWknrFPyQ8zlwrWx\/4lqQEPVZ4gPbUdjxTFGwF+GKvVe1g9reqlMx2ox36ijTv049Q5\/KUI+lXNmIHxeLHv8LoQivI3qWouphfvB3i4zNvuXZKP6idVTj3wHZkCnEx8VBVXOtiPmicDPi\/sX5Ia8BA\/X7goqIdeifAjp+tYB2+vRo7ilSXsR40oXaxaMGoXkVSTqcd+yEEG9KvPCOlSZBqfV\/bwcvDm2r7k+vYcX7UI3GL\/zOd2xhbgMM6Le5H5kJZIP3yeUlPpKVMsKeB6VUrqWJ1X1RQMq577Jr7\/6fsgcXYYP1TiZBStDrkd6Fxq8JGpfqpKrAOUgflU9jJUVc\/Mla6TfoB+NNlAXoqx954B5mHq1b7MemqmBefAzMW0kyxtdZ6M1CvziQVMnkx3UDbpf0Bkoc5YR\/4Q0\/XhxNTPai+mdfvykFHgPMH2\/fk9b2ePZUv8VJUxH+Y4sA7vP9ZjP5Ul3k+lf1aopr7y8ePz51+\/+G+fYjMpeDszVzpO24V3xZxL3LskHzCLNP6q1u06P6mkU9WrxyoxdojzPqu+zOfq68ChPz6328kocJ5g+8UGP\/taPwMtqnqwCCzhkyUbLfSz1RmyeZKXIu+eMVF1AY0eX9V17KQC50DOJR0e4wQIpl\/5QPBEzFAz+fOnQyY\/4F\/VYRT4uXhm\/DOLA333E5V4tWW4dZszGcXAebUe8OzL\/agt2hV+llaZPJpVfqS9JemlmDaO69UWUNw+rSoZP+06bpeK7HS4raW2mLEErKaPmHrgBE+EH7X1UhRYp93e6rQ+b9JRib1SS5XVtrhtnW6pmoICtWnUYeZljkaN4lHJRNqGBvzEFpUZsstAOPFRXMeWsJ\/zIjmXqg+Kcy6XojHGGPN98aVojDHGHPhSNMYYYw58KRpjjDEHvhSNMcaYA1+KxhhjzIEvRWOMMebAl6IxxhjzL\/8A6cUmadD3QJUAAAAASUVORK5CYII=\" alt=\"\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To execute an event on the server, you normally have to send a POST request, because actions will be executed in the Invoke Application phase of the JSF lifecycle. A GET request will only process the Restore View and the &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=1687\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75,89,9,26,27,74,24],"tags":[33,47,8,7,11,31,4,86,87,3,85],"class_list":["post-1687","post","type-post","status-publish","format-standard","hentry","category-dojo","category-java","category-javascript","category-jsf","category-performance","category-xpages","category-xsp","tag-8-5-3","tag-9-0","tag-dojo","tag-domino","tag-http","tag-java","tag-js","tag-jsf","tag-performance","tag-xpages","tag-xsp"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1687"}],"version-history":[{"count":12,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1687\/revisions"}],"predecessor-version":[{"id":1699,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1687\/revisions\/1699"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}