我想为门户中的每个表单提交创建一个侦听器。
我创建了一个称为“测试表单”的表单,在liferay之前(或之后)将信息保存在本地数据库中时,我想将数据表单发送到外部API(并执行所需的任何操作)。 我正在尝试通过执行以下操作来完成此任务:
import org.osgi.service.component.annotations.Component;
import com.liferay.portal.kernel.exception.ModelListenerException;
import com.liferay.portal.kernel.model.BaseModelListener;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.ModelListener;
@Component(immediate = true, service = ModelListener.class)
public class FormListener extends BaseModelListener<Layout> {
@Override
public void onBeforeCreate(Layout model) throws ModelListenerException {
System.out.println(
"About to create layout: " + model.getNameCurrentValue());
model.setTitle("Title generated by model listener!");
}
}
但是更改与每个表单提交相关的类的布局-诸如 FormContent 之类。可以通过“ onAfterSubmit”监听器(或类似的东西)来完成此操作,还是有更好的解决方案?
谢谢。
答案 0 :(得分:0)
如果要在提交任何形式时执行某项操作,则可以仅将脚本与事件侦听器一起使用。
创建Liferay主题:Theme documentation
在您的main.js文件中(或您想要的任何位置),将javascript / jQuery / ...事件监听器放在表单提交中,如下所示:
$('form').on('submit',function(){
//do what you need...
});
jQuery event listener documentation
PS
您编写的代码是“布局”上的“模型侦听器”(即Liferay“语言”中我们网站的页面)。您发布的方法onBeforeCreate
是在创建新页面之前执行的,因此每页一次。它与表单和提交无关。
答案 1 :(得分:0)
您可以像Marco Mercuri那样向您展示前端,但是ModelListener是您的朋友,因此您处于正确的轨道。为此,您可能需要注意DDLRecord。由于数据可能不是实时可用的,因此您可能同时需要ModelListener和MessageListener。例如,您可以在这里查看:https://github.com/jverweijL/auto-translator/tree/master/auto-translator-listener/src/main/java/com/liferay/demo/auto/translate