如何在GWT SuggestBox中隐藏建议?
我正在使用GWT2.4。我有一个Suggestbox,在某些情况下我需要隐藏建议列表。上下文如下 在用户从建议列表中选择建议后,我将填充另外两个文本框字段,其中的值与选择对应。例如,假设suggestbox包含用户名,并且用户从建议中选择用户名,那么其他两个字段(例如用户地址和电子邮件)填充在另外两个文本框中。这两个字段现在是只读的。然后用户单击“编辑”按钮。现在用户可以编辑用户名(即在建议框中编辑)、用户地址和电子邮件。当用户编辑用户名时,再次显示建议是没有意义的,因为用户已经选择了该用户并决定对其进行编辑。简而言之,我的SuggesBox应该像普通文本框一样工作。我尝试了以下代码,(我知道hideSuggestionList()已被弃用),但它不起作用如何在GWT SuggestBox中隐藏建议?,gwt,suggestbox,Gwt,Suggestbox,我正在使用GWT2.4。我有一个Suggestbox,在某些情况下我需要隐藏建议列表。上下文如下 在用户从建议列表中选择建议后,我将填充另外两个文本框字段,其中的值与选择对应。例如,假设suggestbox包含用户名,并且用户从建议中选择用户名,那么其他两个字段(例如用户地址和电子邮件)填充在另外两个文本框中。这两个字段现在是只读的。然后用户单击“编辑”按钮。现在用户可以编辑用户名(即在建议框中编辑)、用户地址和电子邮件。当用户编辑用户名时,再次显示建议是没有意义的,因为用户已经选择了该用户并决
display.getSuggestBox().hideSuggestionList();
阅读javadoc for hideSuggestionList()时,会说,“不推荐使用。请改用DefaultSuggestionDisplay.hideSuggestions()。我不知道如何使用DefaultSuggestionDisplay,我正在使用SuggestBox和“MultiWordSuggestOracle”
谢谢你帮了我的忙 当用户单击“编辑”时,您可以简单地将SuggestionBox与普通文本框交换,当“编辑”关闭时,您可以将SuggestionBox与普通文本框交换。另外,如果要隐藏建议列表,它仍然会从服务器查询。通过交换小部件,您不必担心副作用。SuggestionBox本身也使用一个文本框,因此对于用户来说,它是不可见的。小部件已更改。您可以做的只是在用户单击“编辑”时将SuggestionBox与普通文本框交换,然后在“编辑”关闭时返回。另外,如果要隐藏建议列表,它仍然会从服务器查询。通过交换小部件,您不必担心副作用。SuggestionBox本身也使用一个文本框,因此对于用户来说,它是不可见的,小部件已经更改。以下是解决方案 我的入门课程
public class SuggestionEntryPoint implements EntryPoint {
@Override
public void onModuleLoad() {
SuggestBoxWidget suggestBoxWidget = new SuggestBoxWidget();
RootPanel rootPanel = RootPanel.get();
suggestBoxWidget.createOracle();
suggestBoxWidget.createWidgetAndShow(rootPanel);
rootPanel.add(suggestBoxWidget);
DOM.getElementById("loader").removeFromParent();
}
}
这是我的小部件
public class SuggestBoxWidget extends Composite {
private TextBox textSuggestBox = new TextBox();
private SuggestBox suggestBox = null;
DefaultSuggestionDisplay suggestionDisplay = new DefaultSuggestionDisplay();
MultiWordSuggestOracle suggestOracle = new MultiWordSuggestOracle();
private static SuggestBoxWidgetUiBinder uiBinder = GWT
.create(SuggestBoxWidgetUiBinder.class);
interface SuggestBoxWidgetUiBinder extends
UiBinder<Widget, SuggestBoxWidget> {
}
public SuggestBoxWidget() {
initWidget(uiBinder.createAndBindUi(this));
}
public void registerEvents(){
suggestBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if(suggestBox.getText().equalsIgnoreCase("1")){
suggestionDisplay.hideSuggestions();
}
}
});
}
public void createWidgetAndShow(HasWidgets container){
suggestBox = new SuggestBox(suggestOracle,textSuggestBox,suggestionDisplay);
container.clear();
container.add(suggestBox);
registerEvents();
}
public void createOracle(){
for(int i=1;i<=100;i++){
suggestOracle.add(i+"");
}
}
}
公共类SuggestBoxWidget扩展复合{
私有文本框textSuggestBox=新文本框();
私有SuggestBox SuggestBox=null;
DefaultSuggestionDisplay suggestionDisplay=新建DefaultSuggestionDisplay();
MultiWordSuggestOracle suggestOracle=新的MultiWordSuggestOracle();
私有静态SuggestBoxWidgetUiBinder uiBinder=GWT
.create(SuggestBoxWidgetUiBinder.class);
接口SuggestBoxWidgetUiBinder扩展
UiBinder{
}
public SuggestBoxWidget(){
initWidget(uiBinder.createAndBindUi(this));
}
公共无效注册事件(){
addKeyUpHandler(新的KeyUpHandler(){
@凌驾
公共无效onKeyUp(KeyUpEvent事件){
if(suggestBox.getText().equalsIgnoreCase(“1”){
suggestionDisplay.hidessuggestions();
}
}
});
}
public void createWidgetAndShow(HasWidgets容器){
suggestBox=新建suggestBox(suggestOracle、textSuggestBox、SuggestDisplay);
容器。清除();
容器。添加(建议框);
registerEvents();
}
public-void-createOracle(){
对于(inti=1;i,这里是解决方案
我的入门课程
public class SuggestionEntryPoint implements EntryPoint {
@Override
public void onModuleLoad() {
SuggestBoxWidget suggestBoxWidget = new SuggestBoxWidget();
RootPanel rootPanel = RootPanel.get();
suggestBoxWidget.createOracle();
suggestBoxWidget.createWidgetAndShow(rootPanel);
rootPanel.add(suggestBoxWidget);
DOM.getElementById("loader").removeFromParent();
}
}
这是我的小部件
public class SuggestBoxWidget extends Composite {
private TextBox textSuggestBox = new TextBox();
private SuggestBox suggestBox = null;
DefaultSuggestionDisplay suggestionDisplay = new DefaultSuggestionDisplay();
MultiWordSuggestOracle suggestOracle = new MultiWordSuggestOracle();
private static SuggestBoxWidgetUiBinder uiBinder = GWT
.create(SuggestBoxWidgetUiBinder.class);
interface SuggestBoxWidgetUiBinder extends
UiBinder<Widget, SuggestBoxWidget> {
}
public SuggestBoxWidget() {
initWidget(uiBinder.createAndBindUi(this));
}
public void registerEvents(){
suggestBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if(suggestBox.getText().equalsIgnoreCase("1")){
suggestionDisplay.hideSuggestions();
}
}
});
}
public void createWidgetAndShow(HasWidgets container){
suggestBox = new SuggestBox(suggestOracle,textSuggestBox,suggestionDisplay);
container.clear();
container.add(suggestBox);
registerEvents();
}
public void createOracle(){
for(int i=1;i<=100;i++){
suggestOracle.add(i+"");
}
}
}
公共类SuggestBoxWidget扩展复合{
私有文本框textSuggestBox=新文本框();
私有SuggestBox SuggestBox=null;
DefaultSuggestionDisplay suggestionDisplay=新建DefaultSuggestionDisplay();
MultiWordSuggestOracle suggestOracle=新的MultiWordSuggestOracle();
私有静态SuggestBoxWidgetUiBinder uiBinder=GWT
.create(SuggestBoxWidgetUiBinder.class);
接口SuggestBoxWidgetUiBinder扩展
UiBinder{
}
public SuggestBoxWidget(){
initWidget(uiBinder.createAndBindUi(this));
}
公共无效注册事件(){
addKeyUpHandler(新的KeyUpHandler(){
@凌驾
公共无效onKeyUp(KeyUpEvent事件){
if(suggestBox.getText().equalsIgnoreCase(“1”){
suggestionDisplay.hidessuggestions();
}
}
});
}
public void createWidgetAndShow(HasWidgets容器){
suggestBox=新建suggestBox(suggestOracle、textSuggestBox、SuggestDisplay);
容器。清除();
容器。添加(建议框);
registerEvents();
}
public-void-createOracle(){
对于(int i=1;i如果您不使用自己的SuggestionDisplay
,那么这应该可以正常工作™:
如果您不使用自己的SuggestionDisplay
,那么这应该可以正常工作™:
您好,非常感谢您花时间制定解决方案。.我尝试复制粘贴您的代码,但发现一些UiBinder错误,如下所示:“缺少模板文件SuggestBoxWidget.ui.xml(预期位于com/ctl/qportal/dbutilweb/client/view)”.我还没有使用UiBinder…我会在有时间的时候尝试实现这一点。现在我会按照@Hilbrand Bouwkamp的建议。即用TextBox替换SuggestBox。(我真的很忙:))您不必使用UiBinder。只需创建一个文本框,并通过将文本框引用到SuggestBox构造函数来动态地将其替换为SuggestBox。然后您就可以使用DefaultSuggestDisplay类来隐藏建议…您好,非常感谢您花时间制定解决方案..我尝试了复制粘贴您的代码,b但我收到一些UiBinder错误,如下所示:“模板文件SuggestBoxWidget.ui.xml丢失(预期位于com/ctl/qportal/dbutilweb/client/view)”。我还没有使用UiBinder…我会在有时间的时候尝试实现它。现在我将采用@Hilbrand Bouwkamp的建议。即用Te替换SuggestBox