我有h:form
文本标记。此文本标记没有,支持的语言的部分或全部翻译(例如en,fr,de,es)。
Text
实体中描述的翻译关系如下所示。
@OneToMany(mappedBy="textUnit", cascade=CascadeType.ALL)
private Collection<Translation> translation;
我将文本标记绑定到支持bean,就像这样。
<h:inputHidden id="textId" value="#{textController.id}" />
在同一表格中,我通过我的网站支持的翻译循环(每个翻译都通过此查询返回。如果没有语言,则创建一个空的Translation
实体并且为空。)< / p>
<ui:repeat var="trans" varStatus="status"
value="#{translationController.getAllTranslationsByTextId(textController.id)}">
这一切都很有效。
这是我的问题(与标题中的相同)。如何在不使用JSF刷新页面的情况下提交非绑定的h:inputTextarea?
<h:inputTextarea id="translation" value="#{trans.translation}" cols="50">
<f:ajax listener="#{translationController.translationChanged}" event="change" execute="@form" />
</h:inputTextarea>
我不知道如何将这些循环(ui:repeat
)h:inputTextarea
发送到价值textController
的{{1}},然后使用
change
检索提交的变量 - 但没有刷新页面。有人有提示吗?
如果提交了所有翻译,或者只是我提交的翻译,我都不在乎。我知道与public void translationChanged(AjaxBehaviorEvent event) {
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
.getRequest();
// do something
}
实例(实体)的关系非常重要。
我注意到每次离开Text
时都会向服务器发送请求。但它没有挂钩到translateChanged方法。这里是通过此请求运行的JSF阶段的日志。
inputTextarea