{"id":201,"date":"2015-10-01T22:14:30","date_gmt":"2015-10-01T22:14:30","guid":{"rendered":"https:\/\/aboutcsharp.wordpress.com\/?p=201"},"modified":"2015-10-01T22:14:30","modified_gmt":"2015-10-01T22:14:30","slug":"jsf-and-bootstrap-form-modal","status":"publish","type":"post","link":"https:\/\/sidroniolima.com.br\/blog\/2015\/10\/01\/jsf-and-bootstrap-form-modal\/","title":{"rendered":"JSF and Bootstrap form modal"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n<p>Na atualiza\u00e7\u00e3o de vers\u00e3o do software <a href=\"http:\/\/tetrati.com.br\/twarehouse\" target=\"_blank\">twarehouse<\/a>\u00a0al\u00e9m da migra\u00e7\u00e3o do Tomcat para o Wildfly, a corre\u00e7\u00e3o de alguns bugs, o refatoramento das classes e outras melhorias\u00a0resolvi alterar o framework front-end do <a href=\"http:\/\/primefaces.org\" target=\"_blank\">primefaces<\/a>\u00a0para o <a href=\"http:\/\/getbootstrap.com\/2.3.2\/\" target=\"_blank\">bootstrap<\/a>\u00a0(Twitter).<\/p>\n<p>Tenho enfrentado muitos desafios neste processo j\u00e1 que \u00e9 grande o trabalho para configurar templates htmls criados com bootstrap.<\/p>\n<p>Somado a isso ainda h\u00e1 algumas incompatibilidades de design e comportamento entre o framework e o JSF, que consomem bastante tempo e neur\u00f4nios.<\/p>\n<p>Uma dessas dificuldades que enfrentei foi quando surgiu a necessidade de um mensagem de confirma\u00e7\u00e3o na exclus\u00e3o de registros:<\/p>\n<div id=\"attachment_202\" style=\"width: 670px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-controle-pesquisa.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-202\" class=\"wp-image-202 size-large\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-controle-pesquisa.png?w=660\" alt=\"Controle na pesquisa dos registro.s\" width=\"660\" height=\"165\" \/><\/a><p id=\"caption-attachment-202\" class=\"wp-caption-text\">Controle na pesquisa dos registro.<\/p><\/div>\n<p>Os &#8220;bot\u00f5es&#8221; do controle na verdade correspondem ao atributo &lt;a&gt; do html com o atributo jsfc que permite a utiliza\u00e7\u00e3o dos atributos do componente aninhado \u00e0 tag html, no caso o &lt;a&gt;. Segue abaixo:<\/p>\n<p>[code language=&#8221;html&#8221;]<\/p>\n<p>&lt;a class=&quot;btn btn-danger&quot;<br \/>\n jsfc=&quot;h:commandLink&quot;<br \/>\n type=&quot;button&quot;<br \/>\n action=&quot;#{pesquisaSubgrupoBean.setSubgrupoSelecionado(subgrupo)}&quot;<br \/>\n immediate=&quot;true&quot;&gt;<br \/>\n &lt;f:setPropertyActionListener<br \/>\n value=&quot;#{subgrupo}&quot;<br \/>\n target=&quot;#{pesquisaSubgrupoBean.subgrupoSelecionado}&quot;\/&gt;<\/p>\n<p> &lt;f:passThroughAttribute name=&quot;data-toggle&quot; value=&quot;modal&quot; \/&gt;<br \/>\n &lt;f:passThroughAttribute name=&quot;data-target&quot; value=&quot;#myModal&quot; \/&gt;<br \/>\n &lt;f:ajax\/&gt;<\/p>\n<p> &lt;i class=&quot;icon_close_alt2&quot;&gt;&lt;\/i&gt;<br \/>\n&lt;\/a&gt;<br \/>\n[\/code]<\/p>\n<p>At\u00e9 ai tudo bem. O problema mesmo era fazer com que o form modal fosse chamado ao clicar no bot\u00e3o. Segue o c\u00f3digo do form:<\/p>\n<p>[code language=&#8221;html&#8221;]<\/p>\n<p>&lt;div class=&quot;modal fade&quot; id=&quot;myModal&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;myModal&quot; aria-hidden=&quot;true&quot; data-keyboard=&quot;false&quot; data-backdrop=&quot;static&quot;&gt;<br \/>\n &lt;div class=&quot;modal-dialog modal-sm&quot;&gt;<br \/>\n &lt;div class=&quot;modal-content&quot;&gt;<br \/>\n &lt;h:form id=&quot;myForm&quot;&gt;<br \/>\n &lt;div class=&quot;modal-header&quot;&gt;<br \/>\n &lt;button aria-hidden=&quot;true&quot; data-dismiss=&quot;modal&quot; class=&quot;close&quot; type=&quot;button&quot;&gt;\u00d7&lt;\/button&gt;<br \/>\n &lt;h4 class=&quot;modal-title&quot;&gt;Confirma\u00e7\u00e3o de exclus\u00e3o&lt;\/h4&gt;<br \/>\n &lt;\/div&gt;<br \/>\n &lt;div class=&quot;modal-body&quot;&gt;<br \/>\n &lt;h:panelGroup<br \/>\n layout=&quot;block&quot;<br \/>\n id=&quot;panelDescricao&quot;&gt;<\/p>\n<p> Deseja realmente excluir o registro selecionado?<\/p>\n<p> &lt;a type=&quot;submit&quot;<br \/>\n class=&quot;btn btn-warning btn-sm&quot;<br \/>\n jsfc=&quot;h:commandLink&quot;<br \/>\n action=&quot;#{pesquisaSubgrupoBean.excluir()}&quot;&gt;<br \/>\n Sim<br \/>\n &lt;f:passThroughAttribute name=&quot;data-dismiss&quot; value=&quot;modal&quot; \/&gt;<br \/>\n &lt;f:ajax<br \/>\n execute=&quot;@this&quot;<br \/>\n render=&quot;@form&quot;\/&gt;<br \/>\n &lt;\/a&gt;<\/p>\n<p> &lt;button<br \/>\n id=&quot;close&quot;<br \/>\n type=&quot;submit&quot;<br \/>\n class=&quot;btn btn-info btn-sm&quot;&gt;N\u00e3o&lt;\/button&gt;<br \/>\n &lt;\/h:panelGroup&gt;<br \/>\n &lt;\/div&gt;<\/p>\n<p> &lt;\/h:form&gt;<br \/>\n &lt;\/div&gt;<br \/>\n &lt;\/div&gt;<br \/>\n&lt;\/div&gt; <\/p>\n<p>[\/code]<\/p>\n<p>Ap\u00f3s muitas falhas, como Edson, s\u00f3 precisei acertar uma vez. Com a adi\u00e7\u00e3o dos atributos no c\u00f3digo do bot\u00e3o o form passou a ser chamado, mas instantaneamente era fechado:<\/p>\n<p>[code language=&#8221;html&#8221;]<\/p>\n<p> &lt;f:passThroughAttribute name=&quot;data-toggle&quot; value=&quot;modal&quot; \/&gt;<br \/>\n &lt;f:passThroughAttribute name=&quot;data-target&quot; value=&quot;#myModal&quot; \/&gt;<\/p>\n<p>[\/code]<\/p>\n<p><a href=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-206\" src=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal.png?w=660\" alt=\"Form modal chamado pelo bot\u00e3o excluir.\" width=\"660\" height=\"185\" srcset=\"https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal.png 1143w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal-300x84.png 300w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal-1024x287.png 1024w, https:\/\/sidroniolima.com.br\/blog\/wp-content\/uploads\/2015\/10\/print-form-modal-4x1.png 4w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p>Form modal chamado pelo bot\u00e3o excluir.<\/p>\n<p>Espero que tenha contribu\u00eddo e ajudado algu\u00e9m, j\u00e1 que vi algumas tantas d\u00favidas ainda n\u00e3o respondidas ou que a solu\u00e7\u00e3o fosse diferente e ineficaz.<\/p>\n<p>Em tempo: ainda tem um pequeno problema. N\u00e3o consegui a descri\u00e7\u00e3o das inst\u00e2ncia selecionada na mensagem de exclus\u00e3o. O componente seta a propriedade mas o valor n\u00e3o \u00e9 exibido. Vou debugar utilizando alguns phaseListeners para identificar o momento de cada a\u00e7\u00e3o.<\/p>\n<p>At\u00e9!<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Na atualiza\u00e7\u00e3o de vers\u00e3o do software twarehouse\u00a0al\u00e9m da migra\u00e7\u00e3o do Tomcat para o Wildfly, a corre\u00e7\u00e3o de alguns bugs, o refatoramento das classes e outras melhorias\u00a0resolvi alterar o framework front-end do primefaces\u00a0para o bootstrap\u00a0(Twitter). Tenho enfrentado muitos desafios neste processo j\u00e1 que \u00e9 grande o trabalho para configurar templates htmls criados com bootstrap. Somado a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-201","post","type-post","status-publish","format-standard","hentry","category-sistema-de-informacao"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/comments?post=201"}],"version-history":[{"count":0,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/201\/revisions"}],"wp:attachment":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/media?parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/categories?post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/tags?post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}