0

我的问题如下,我有一个用于布局我的 Web 应用程序的 template.xhtml

<div id="header">
   <ui:insert name="header">
        [Top Bar content will be inserted here]
     </ui:insert>
    </div>



    <div id="main">
        <ui:insert name="main">
            [Nav Bar Left content will be inserted here]
         </ui:insert>
    </div>

    <div id="button">
         <ui:insert name="button">
            [Nav Bar Left content will be inserted here]
         </ui:insert>
    </div>

然后我有一个 addOrder.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="/WEB-INF/template/popUpInsert.xhtml">

<ui:define name="header">
  <h:outputLabel value="Status" />
  <rich:inplaceInput value="#{ordineController.orderToSave.status}"   />
  <h:outputLabel value="Code" />
  <rich:inplaceInput value="#{ordineController.orderToSave.code}"  />
</ui:define>
<ui:define name="main">
  Here there is a data table that contains lines of the order
</ui:define>
<ui:define name="button">
 <h:form>
 <a4j:commandButton value="Save" action="#{ordineController.addOrder()}" />
 <h:form>
</ui:define>

但是当我尝试保存状态和代码都为空的订单时,我尝试将范围更改为按钮保存(执行 =“@all”)但没有

怎么了?

4

2 回答 2

0

您需要将相关的输入组件放在与命令组件相同的形式中。任何与命令组件形式不同的输入组件在提交中都会被忽略。请注意,这是一个 HTML 限制,而不是 JSF 限制。

所以,这应该为你做:

<h:form>
    <div id="header">
        <ui:insert name="header">
            [Top Bar content will be inserted here]
        </ui:insert>
    </div>

    <div id="main">
        <ui:insert name="main">
            [Nav Bar Left content will be inserted here]
        </ui:insert>
    </div>

    <div id="button">
        <ui:insert name="button">
            [Nav Bar Left content will be inserted here]
        </ui:insert>
    </div>
</h:form>

和:

<ui:define name="header">
    <h:outputLabel value="Status" />
    <rich:inplaceInput value="#{ordineController.orderToSave.status}" />
    <h:outputLabel value="Code" />
    <rich:inplaceInput value="#{ordineController.orderToSave.code}"  />
</ui:define>
<ui:define name="main">
    Here there is a data table that contains lines of the order
</ui:define>
<ui:define name="button">
    <a4j:commandButton value="Save" action="#{ordineController.addOrder()}" />
</ui:define>

请注意不要以这种方式创建“上帝”形式。

于 2013-01-22T12:36:53.493 回答
0

将此添加到您的页面<h:messages styleClass="message" />,您将看到来自 JSF 的更多警告,在您的情况下,应该有一个关于缺少表单的警告,因为 JSF 知道哪些元素需要在其中。最后都是 HTML 和 JavaScript,所以如果你想提交,输入需要在表单中。

于 2013-01-22T09:14:49.783 回答