2015-10-07 41 views
2

我有一顆豆Vaadin-> BeanFieldGroup滾動頁面,填寫不當場

@Entity 
@Table(name = "t_beans1") 
public class Bean1 implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID") 
    private int id; 
    @NotNull(message = "empty") 
    @Size(min = 2, max = 200) 
    private String a00_01 = ""; 
...} 

在我的佈局,我與BeanFieldGroup

final BeanFieldGroup<Bean1> binder = new BeanFieldGroup<Bean1>(Bean1.class); 
.... 
vl00.addComponent(binder.buildAndBind(((MyUI) MyUI.getCurrent()).stringResource.getString("00.01"), "a00_01", TextField.class)); 

結合它,並提交:

Button submit = new Button(((MyUI) MyUI.getCurrent()).stringResource.getString("submit")); 
    submit.setSizeUndefined(); 
    submit.addClickListener(event -> { 
       try { 
        binder.commit(); 
((MyUI) MyUI.getCurrent()).bean1Service.insert(binder.getItemDataSource().getBean()); 
} 
catch (FieldGroup.CommitException e) 
{ /*here i need to scroll to unproperly filled field**/}} 

所有的工作都很好,bean驗證工作正常,並且填充的字段與我的樣式相對應(例如紅框)。 但是! 我的問題是:是否有機制檢測滾動頁面不正確填充字段?

PS:我使用hibernate-validator.4.3.2.Final不同,Vaadin 7.5.6,

謝謝你的建議。

回答

0

約無效字段信息可以從異常對象獲得:

} catch (FieldGroup.CommitException e) { 
    String invalidFieldsNames = e.getInvalidFields().keySet().stream().map(Component::getCaption).collect(Collectors.joining(", ")); 
    Notification.show("Invalid fields: ", invalidFieldsNames, Notification.Type.ERROR_MESSAGE); 
} 

您可以使用@HenriKerola答案將視圖滾動到任何無效字段。

簡單的解決方案:首先,您可以將所有字段保存在某個容器中,並在catch中找到無效字段的標題,然後使用自己的映射(從容器中獲取)滾動到右側組件。或者選擇任何:

getUI().scrollIntoView(e.getInvalidFields().keySet().iterator().next()); 
0

如果您有機會獲得你想要滾動到組件實例,可以使用在UIscrollIntoView方法:

TextField textField = new TextField(); 

... 

getUI().scrollIntoView(textField); 
+0

謝謝,它很有幫助。但主要問題是如何檢測「不正確的填充字段」 – zond