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-urlencodedas 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