我重写了一个UserBrowse来替代系统自带的用户列表界面。实体还是使用的系统自带的对象。我在使用pickerField控件去选择用户的时候,如何让他弹出的是我写的UserBrowse而不是系统默认的那个呢?有没有什么全局设置
这是扩展界面最基本的功能:
如果在screens.xml中注册一个新界面,新界面使用与父界面相同的标识符,这样新界面就会代替旧界面。
<screen id="sec$User.browse"
template="com/sample/sales/gui/extuser/extuser-browse.xml"/>
<screen id="sec$User.lookup"
template="com/sample/sales/gui/extuser/extuser-browse.xml"/>
我试试看,我用的7.2,报错如下:
DevelopmentException: Unable to create screen sec$User.lookup with type FRAGMENT. If the screen is defined as @UiController make sure it is not present in legacy screens.xml
还有别的招吗?
我猜你用了这个com.haulmont.cuba.gui.builders.LookupBuilder#withScreenClass
这个方法要求使用新的 controller 定义方式:
@Route(path = “login”, root = true)
@UiDescriptor(“login-screen.xml”)
@UiController(“login”)
public class LoginScreen extends Screen {
但是 Security 下面的这几个 Screen 都是旧的定义方式,你需要用 com.haulmont.cuba.gui.builders.LookupBuilder#withScreenId
我是在XML里直接用metaClass=“sec$User”,我用新API重写了UserBrowse
@Subscribe("accountPicker.lookup") public void onAccountPickerLookup(Action.ActionPerformedEvent event) { screenBuilders.lookup(accountPicker) //.withScreenClass(UserLookup.class) .withScreenId("sec$User.lookup") .build() .show(); }
descriptor:
<form id="form" dataContainer="orderDc"> <column id="accountCol" width="350px"> <pickerField id="accountPicker" property="account"> <actions> <action id="lookup"/> <action id="show" icon="PICKERFIELD_OPEN" caption="Show"/> </actions> </pickerField> </column> </form>
手动打开,你如果改写了就可以用 withScreenClass
用代码的方式可以了,谢谢!