<f:facet>不使用<h:form> </h:form> </f:facet>

时间:2014-07-24 15:19:27

标签: jsf facelets jsf-2.2

我有一个模板,其中定义了<h:form>。这个<h:form>在整个应用程序中用于实体的CRUD页面。

因此,在一个地方我需要另一个enctype表单,以便我可以上传文件。我想我可以用模板中的一个方面解决这个问题:

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

在具体页面上,我想以这种方式设置自定义enctype

<ui:define name="form-enctype">
    <h:outputText value="multipart/form-data"/>
</ui:define>

但是在源代码中,我总是将application/x-www-form-urlencoded enctype作为<h:form>

的默认{{1}}

为什么会这样?在源代码中的其他位置,这表现得很好。

1 个答案:

答案 0 :(得分:2)

h:form的参考页面未提及enctype方面。我不认为它是h:form的有效方面。但是,有属性enctype

如果要在特定页面中定义表单的内容类型,请使用如下所示的模板参数。

模板看起来就是:

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

并且特定页面必须定义<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>

如果您想为参数使用三元运算符提供默认值,如this question中所述。