Apache Isis:如何正确实现自定义提交表单或页面?

Apache Isis: How to implement your custom submit form or page properly?

我是 Apache Isis 的新手,我被困住了。

我想创建自己的提交表单,其中包含用于搜索某些实体的可编辑参数以及下方包含搜索结果的网格。

首先,我创建了@DomainObject(nature=Nature.VIEW_MODEL),其中包含搜索结果集合、搜索参数和搜索@Action。 经过更深入的研究,我发现了动作的严格实现(例如 ActionParametersFormPanel)。我可以在没有提示的情况下使用@Action 和编辑@DomainObject 属性(我的操作搜索参数)吗? 我可以通过 layout.xml 实现吗?

然后我尝试按照此处所述更改组件:6.2 Replacing page elements,但我很困惑我应该使用哪个 ComponentType 和 IModel,也许 ComponentType.PARAMETERS 和 ActionModel 或为我的案例实现我自己的 IModel .

我是否应该实现自己的 Wicket 页面以进行搜索并通过 PageClassList 接口进行注册,如下所述:6.3 Custom pages 据我了解,我需要为其中一种 PageType 替换页面 class,但我应该更改哪一个?

那么,问题是如何正确实施这些问题?我应该选择哪种方式?

谢谢!

=====================更新===================

我以这种方式实现了 HomePageViewModel:

@DomainObject(
        nature = Nature.VIEW_MODEL,
        objectType = "homepage.HomePageViewModel"
)
@Setter @Getter
public class HomePageViewModel {

    private String id;
    private String type;

    public TranslatableString title() {
        return TranslatableString.tr("My custom search");
    }

    public List<SimpleObject> getObjects() {
        return simpleObjectRepository.listAll();
    }

    @Action
    public HomePageViewModel search(
            @ParameterLayout(named = "Id")
            String id,
            @ParameterLayout(named = "Type")
            String type
    ){
        setId(id);
        setType(type);
        // finding objects by entered parameters is not implemented yet
        return this;
    }

    @javax.inject.Inject
    SimpleObjectRepository simpleObjectRepository;
}   

它的工作原理是这样的:

我想实现一个带参数的内置 ViewModel 操作,无需任何对话框 windows,如下所示:

1) 是否可以基于 ComponentType.PARAMETERS 和 ActionModel 创建类似 ActionParametersFormPanel 的 smth,并在我的 ViewModel 中将此组件用作 @Action?

2) 或者我应该像你说的那样使用ComponentType.COLLECTION_CONTENTS?据我了解,我的搜索结果网格和我的搜索输入面板将像一个存根组件?

谢谢。

我们的 JIRA 中有一个 JIRA ticket 来实现一个 filterable/searchable 组件,但它还没有成为实现列表的顶部。

作为替代方案,您可以有一个视图模型,它提供您要过滤的参数作为属性,下面有一个 table。 (我看到你在这里问了另一个关于视图模型上的 SO re 属性的问题,所以也许你也在朝着那个方向前进......我已经回答了那个问题)。

如果您确实想尝试实施该票证,那么要使用的 ComponentTYpe 是 COLLECTION_CONTENTS。如果您看一下 isisaddons,例如 excel or gmap3,那么它可能会帮助您入门。

=======更新答案(基于对查询所做的更新)==========

我有一些好消息要告诉你。 v1.15.0-SNAPSHOT 应该会在这两周发布,支持 "inline prompts"。您应该会发现这些提供的用户体验与您所追求的非常相似,您无需做进一步的工作。

要尝试一下,请检查当前的主干,然后加载 simpleapp(在 examples/application/simpleapp 中)。您应该看到编辑属性和调用操作使用新的内联提示样式。

HTH 旦