TYPO3 fluid select 属性 提交后仍然是空的
TYPO3 fluid select property remains empty after submit
我正在为我的模型创建一个编辑页面,其中包含以下代码:
<f:form action="createEditSave" addQueryString="1" method="POST" object="{activity}" objectName="activity">
<f:form.select property="competence" options="{competences}" prependOptionLabel="" prependOptionValue="" optionLabelField="name" />
</f:form>
当我提交表单时(select select 中的一个选项)我希望我的 createEditSaveAction 中的模型在这种情况下包含一个权限。但即使请求确实包含参数,它仍然是空的。我认为它应该自动 select 对象并且我必须在我的 createEditSaveAction 中自己处理它是错误的吗?
我相信我的 html 是正确的。
提交表单时,我没有收到任何验证错误,并正确发送到我的 createEditSaveAction。只有在这里,我希望我的 Activity 模型具有能力模型,但 setCompetence() 函数接收到一个空的 objectStorage。
取决于将您送回表格的情况:
- 如果问题是验证错误,则应预先填充该值,因为它会存在于引用请求的请求数据中,然后由 ViewHelper 读取以确定当前值。
- 如果您重定向到编辑操作,则 属性 值仅存在于您传递的对象上,并且如果该对象未指定为显示表单的操作中的模板变量。
- 如果您指定
optionValueField
属性 可能会有所帮助 - 如果您明确为该字段传递 value
也可能会有所帮助。
- 不要忘记,如果您的用例过于特殊而无法满足此要求,您始终可以在循环中使用
f:form.select.option
手动呈现选项,包括选定的属性。
最后一句话:从你的动作命名来看,你似乎有一个能够创建和更新对象的动作。这是不好的做法 - 你应该为此使用两种不同的操作,并且在 "new" 操作上你的对象参数应该是可选的并且默认情况下为 null,在 "edit" 上它应该是强制性的。这也可能是一个很好的机会来总体上检查您的控制器,以确认它确实确实为所有操作使用了正确声明和注释的参数和参数类型。如果您绕过该框架,表单验证和随后的字段值解析之类的事情可能不会像您预期的那样工作。
解决了我自己的问题。问题是我的模型中的注释说它是一个 objectStorage。
我的表单也有类似的问题,我不得不在 属性 标签中包含名称 和 。
<f:form.select name="foo" property="foo">
<f:form.select.option value="bar">Bar</f:form.select.option>
</f:form.select>
我正在为我的模型创建一个编辑页面,其中包含以下代码:
<f:form action="createEditSave" addQueryString="1" method="POST" object="{activity}" objectName="activity">
<f:form.select property="competence" options="{competences}" prependOptionLabel="" prependOptionValue="" optionLabelField="name" />
</f:form>
当我提交表单时(select select 中的一个选项)我希望我的 createEditSaveAction 中的模型在这种情况下包含一个权限。但即使请求确实包含参数,它仍然是空的。我认为它应该自动 select 对象并且我必须在我的 createEditSaveAction 中自己处理它是错误的吗?
我相信我的 html 是正确的。
提交表单时,我没有收到任何验证错误,并正确发送到我的 createEditSaveAction。只有在这里,我希望我的 Activity 模型具有能力模型,但 setCompetence() 函数接收到一个空的 objectStorage。
取决于将您送回表格的情况:
- 如果问题是验证错误,则应预先填充该值,因为它会存在于引用请求的请求数据中,然后由 ViewHelper 读取以确定当前值。
- 如果您重定向到编辑操作,则 属性 值仅存在于您传递的对象上,并且如果该对象未指定为显示表单的操作中的模板变量。
- 如果您指定
optionValueField
属性 可能会有所帮助 - 如果您明确为该字段传递value
也可能会有所帮助。 - 不要忘记,如果您的用例过于特殊而无法满足此要求,您始终可以在循环中使用
f:form.select.option
手动呈现选项,包括选定的属性。
最后一句话:从你的动作命名来看,你似乎有一个能够创建和更新对象的动作。这是不好的做法 - 你应该为此使用两种不同的操作,并且在 "new" 操作上你的对象参数应该是可选的并且默认情况下为 null,在 "edit" 上它应该是强制性的。这也可能是一个很好的机会来总体上检查您的控制器,以确认它确实确实为所有操作使用了正确声明和注释的参数和参数类型。如果您绕过该框架,表单验证和随后的字段值解析之类的事情可能不会像您预期的那样工作。
解决了我自己的问题。问题是我的模型中的注释说它是一个 objectStorage。
我的表单也有类似的问题,我不得不在 属性 标签中包含名称 和 。
<f:form.select name="foo" property="foo">
<f:form.select.option value="bar">Bar</f:form.select.option>
</f:form.select>