我在提交复合组件方面有问题。
我的大多数复合组件都包含输入组件和“提交”按钮。当我试图将按钮仍然放在相同的h:form中但不放在相同的复合组件中时,提交的值似乎“丢失”在某个地方。例如,我的验证器被调用原始值。
<composite:interface>
<composite:attribute name="titreContext" required="true"/>
</composite:interface>
<composite:implementation>
<p:outputPanel id="selectionTitreDetailsPanel" styleClass="selectionTitreDetails">
<p:outputPanel id="selectionTitreDetailsPanelInner" rendered="#{not empty cc.attrs.titreContext.selected}">
<p:panelGrid columns="2" id="panelId">
<h:outputText id="idLabel" value="Id :"/>
<h:outputText id="id" value="#{cc.attrs.titreContext.selected.titeluid}"/>
<p:tooltip for="id" value="Identifiant unique"/>
</p:panelGrid>
<p:panelGrid columns="2" id="titelePanel">
<p:outputLabel for="selectTitele" value="Titre :"/>
<p:selectOneMenu id="selectTitele" value="#{cc.attrs.titreContext.selected.titele}" effect="fold" styleClass="fullWidth">
<f:selectItems value="#{constants.getTitelesForTypman(cc.attrs.titreContext.selected.titele.typman)}" var="titele" itemLabel="#{titele.titelelil}" itemValue="#{titele}" styleClass="fullWidth"/>
<p:column styleClass="fullWidth">#{titele.titelelil}</p:column>
</p:selectOneMenu>
</p:panelGrid>
[...]
<p:commandButton id="confirmerModifications" icon="small_edit" type="submit" value="Confirmer les modifications"
action="#{elutersEditionContext.confirmeModifsSelection}" process="mandatsTerritorial"
update="mandatsTerritorial #{cc.attrs.notifUpdates}"/>
</composite:implementation>
<h:form>
<mylib:mycomponent /*parameters *//>
<p:commandButton /*parameters*/ />
</h:form>
不起作用。当我调试我的验证器时,我可以看到修改的值甚至没有提交。getLocalValue、getSubmittedValue和getValue均未更改。
复合组件声明中有语法可以用来纠正这种情况吗?顺便说一下:当我将组件编写为复合组件而不是自定义组件时,在备份bean中检索#{asen}刚刚起作用。
提前道谢。
(更新)这个非常奇怪的问题是由H:Form嵌套造成的。
非常奇怪,因为H:Form嵌套没有扰动复合组件第一层的处理,而是在嵌套复合中造成了这种奇怪的“输入丢失”。
<h:form>
...
<p:tabView ...>
<p:tab>
<h:form>
<my:composite ....>
</h:form>
</p:tabView>
</h:form>
您正在
的process
属性中使用相对客户端ID:
<p:commandButton ... process="mandatsTerritorial" />
相对客户端ID相对于父namingcontainer
组件。它将作为NamingContainer
组件的直接子级进行搜索。如果子级本身是namingcontainer
,则不会搜索它的子级。
复合组件本身实际上也是namingcontainer
组件。如果该按钮被放置在组合中,则将作为
的直接子项进行搜索。在您的特定情况下,只有带有id=“mandatsterrgative”
的组件才会在表单提交时被处理,包括它的所有子组件(注意,到目前为止发布的代码中看不到这个组件,但我想您为了简洁而省略了它)。
如果按钮放置在
中,则该按钮将作为
的直接子级进行搜索。但是,由于它显然被放置在复合组件中(如前所述,这是另一个namingcontainer
组件),因此不会找到它,因此基本上不会处理任何东西。您需要修复process
以指向正确的客户端ID。例如。
<h:form>
<mylib:mycomponent id="mycomponent" />
<p:commandButton ... process="@this mycomponent:mandatsTerritorial" />
</h:form>
这样它就会处理自己(强制调用该操作!)以及具有id=“MyComponent”
的组合的
id=“MyComponent”
的组件。
作为一个完全不同的替代方案,在这个特定的构造中可以很好地工作,它是完全删除process
属性。它已经默认为@form
,这将处理整个表单。
根据您的问题更新:嵌套表单在HTML中无效。使用JSF
表示方式不会改变这一点;您最终仍然会使用HTML中的嵌套表单。对于哪些数据将提交给服务器,浏览器的行为未指定。请确保您没有在JSF中嵌套
。
Vue.js新手,尝试在表示表单的组件中处理提交事件,该表单将检查子组件的有效性,并在一切正常的情况下将处理传递给父组件中的事件处理程序。 我得到这个错误。。。[Vue warn]:v-on处理程序中的错误:“TypeError:undefined不是在中找到的对象(计算“$event.preventDefault”)”--- 子组件是MyForm。。。 父组件(应用程序)。。。 或者,将应用程序
我试图在使用RESTendpoint的骆驼路由中构建一个分割/聚合模式。它需要一个包含请求详细信息列表的请求对象。我想并行处理请求详细信息,然后将聚合结果返回给调用方。我希望这是一个同步调用。 这是我的路线中的代码。 我希望调用的结果是聚合调用(我的响应对象)的输出。但我实际上得到的是REST调用返回的请求对象?? 当我放入更多的日志语句时,我可以看到Split调用正在触发多个线程,这很好。我可以
我在Ubuntu 18.04.1 LTS上安装了以下内容: 有人知道怎么修吗?
有没有一种方法可以恢复提交,使我的本地副本保留在提交中所做的更改,但它们在我的工作副本中变成未提交的更改?回滚提交会将您带到上一次提交——我希望保留所做的更改,但是我将它们提交到了错误的分支。 这没有被推动,只是被promise。
我有一个模式,用户需要填写他的电子邮件广告。问题是输入字段在每次键入字母后都会失去状态。 父组件: 示例MailingModal: 文本输入: 我在其他几个地方使用输入字段。但在我的模态中,它不是。我做错了什么?
主要内容:实例JSF通过Facelets提供复合组件(有点类似于)的概念。复合组件是一种特殊类型的模板,它充当应用程序中的一个组成部分。 复合组件由标记标签和其他现有组件组成。 这个可重复使用的用户创建的组件具有定制的定义功能,并且可以像任何其他组件一样具有连接到它的验证器,转换器和监听器。 包含标记标签和其他组件的任何XHTML页面都可以转换为复合组件。 以下表格包含复合标签以及说明 - 标签 功能 它用于声