在Liferay 7.2中为每个表单提交创建一个侦听器

问题描述 投票:0回答:2

我想为门户中的每个表单提交创建一个侦听器。

我创建了一个称为“测试表单”的表单,在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!");
    }
}

但是更改与每个表单提交有关的类的Layout-类似于FormContent之类。使用“ onAfterSubmit”监听器(或类似的东西)来完成此操作是否可行,或者有更好的解决方案?

提前感谢。

liferay liferay-7
2个回答
0
投票

如果要在提交[[任何形式时执行某项操作,则可以仅将脚本与事件侦听器一起使用。

创建Liferay主题:Theme documentation

在您的main.js文件中(或您想要的任何地方)将javascript / jQuery / ...事件监听器放在表单提交中,如下所示:

$('form').on('submit',function(){ //do what you need... });

jQuery event listener documentation

PS

您编写的代码是Layout上的Model Listener(这是我们网站使用Liferay“ language”编写的页面)。您发布的方法onBeforeCreate在创建新页面之前执行,因此每页一次。它与表单和提交无关。


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
© www.soinside.com 2019 - 2024. All rights reserved.