I have a template, in which a <h:form>
is defined. This <h:form>
is used all over the application for the CRUD pages of entities.
So, at one place I need another enctype
for the form, so that I can upload files. I thought I can solve this with a facet in the template:
<h:form id="main-form">
<f:facet name="enctype">
<ui:insert name="form-enctype"/>
</f:facet>
<ui:insert name="buttons"/><p/>
<ui:insert name="content"/><p/>
<ui:insert name="buttons"/>
<ui:insert name="additionalHelper"/>
</h:form>
And at the concrete page I wanted to set the custom enctype
this way:
<ui:define name="form-enctype">
<h:outputText value="multipart/form-data"/>
</ui:define>
But in the source code I always end up with the default application/x-www-form-urlencoded
as enctype
for the <h:form>
Why is this happening? At other locations in the source code this is behaving properly.
The reference pages for h:form does not mention enctype
facet. I don't think it is valid facet for h:form
. However, there is attribute enctype
.
If you want to define content type of the form in specific pages then use template parameters like shown below.
Template would look then:
<h:form id="main-form" enctype="#{myenctype}">
<ui:insert name="buttons"/><p/>
<ui:insert name="content"/><p/>
<ui:insert name="buttons"/>
<ui:insert name="additionalHelper"/>
</h:form>
and specific page has to define <ui:param name="myenctype" value="multipart/form-data"/>
:
<ui:composition template="template.xhtml">
<ui:param name="myenctype" value="multipart/form-data"/>
<!-- other stuff like <ui:define ...> -->
</ui:composition>
If you want to provide default value for the parameter use ternary operator like described in this question.
来源:https://stackoverflow.com/questions/24937757/ffacet-not-working-with-hform