p:inputText(慢)getter调用清除用户值
p:inputText (slow) getter call clears user value
做了一些搜索(这里和 google)- 找不到任何相关的东西,希望有人有想法。
虽然我们的应用程序 运行 异常缓慢,但我们发现了一个错误,其中用户输入的 <p:inputText id="searchNameInput" .../>
值(位于 <p:overlayPanel>
内)在用户提交。据我所知,由于应用程序运行缓慢,用户能够在初始 getter 调用之前输入一个值。 getter 然后调用 returns 一个空字符串,有效地清除用户输入的值。
不确定如何解决这个问题 - 欢迎任何想法。
下面的代码片段。
createSavedSearchBeanDialogue.xhtml
<p:outputPanel styleClass="save-search-panel-option" autoUpdate="true">
<p:inputText id="searchNameInput"
value="#{existingSavedSearchBean.searchNameToDisplay}"
styleClass="#{existingSavedSearchBean.inputTextStyleClass}"
widgetVar="wvsearchNameInput" size="55"
validatorMessage="#{msgs['search_results.operation.msg.error.search_name_empty']}"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.saveAsACopy}">
<f:validateRegex pattern="^(?=\s*\S).*$" />
</p:inputText>
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="saveAsACopyCheckbox"
widgetVar="wvSaveAsACopyCheckbox"
value="#{existingSavedSearchBean.saveAsACopy}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch}"
styleClass="col-settings-panel-radio"
process="@this"
update="searchNameInput saveCurrentSearchButton"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.currentSearchIsEditable}" >
<p:ajax listener="#{existingSavedSearchBean.saveAsACopyCheckboxChanged}"
update="searchNameInput saveCurrentSearchButton"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="saveAsACopyCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.save_as.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch}" />
<h:outputLabel for="saveAsACopyCheckbox" styleClass="saved-search-overwritten-info"
value="#{msgs['search_results.save_search_panel.checkbox.save_as.not_overwritable.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch and
!existingSavedSearchBean.currentSearchIsEditable}" />
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="updatedSearchCriteriaCheckbox"
widgetVar="wvUpdatedSearchCriteriaCheckbox"
value="#{existingSavedSearchBean.useUpdatedSearchCriteria}"
styleClass="col-settings-panel-radio"
update="saveCurrentSearchButton"
process="@this"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.searchCriteriaHasChanged}" >
<p:ajax update="saveCurrentSearchButton updatedColumnSettingsCheckbox"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="updatedSearchCriteriaCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.updated_criteria.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.searchCriteriaHasChanged}" />
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="updatedColumnSettingsCheckbox"
widgetVar="wvUpdatedColumnSettingsCheckbox"
value="#{existingSavedSearchBean.useUpdatedColumnSettings}"
styleClass="col-settings-panel-radio"
update="saveCurrentSearchButton"
process="@this"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.columnSettingsHaveChanged}" >
<p:ajax update="saveCurrentSearchButton updatedSearchCriteriaCheckbox"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="updatedColumnSettingsCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.updated_column_settings.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.columnSettingsHaveChanged}" />
</p:outputPanel>
</p:panelGrid>
我想我终于 运行 找到了一个解决方案 - 我想我会 post 它以防万一有人遇到类似的问题。
在封闭的 <p:outputPanel>
上设置 autoUpdate="false"
(而不是 "true")似乎可以消除有问题的 getter 调用。
<p:outputPanel styleClass="save-search-panel-option" autoUpdate="false">
<p:inputText id="searchNameInput"
value="#{existingSavedSearchBean.searchNameToDisplay}"
styleClass="#{existingSavedSearchBean.inputTextStyleClass}"
widgetVar="wvsearchNameInput" size="55"
validatorMessage="#{msgs['search_results.operation.msg.error.search_name_empty']}"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.saveAsACopy}">
<f:validateRegex pattern="^(?=\s*\S).*$" />
</p:inputText>
</p:outputPanel>
做了一些搜索(这里和 google)- 找不到任何相关的东西,希望有人有想法。
虽然我们的应用程序 运行 异常缓慢,但我们发现了一个错误,其中用户输入的 <p:inputText id="searchNameInput" .../>
值(位于 <p:overlayPanel>
内)在用户提交。据我所知,由于应用程序运行缓慢,用户能够在初始 getter 调用之前输入一个值。 getter 然后调用 returns 一个空字符串,有效地清除用户输入的值。
不确定如何解决这个问题 - 欢迎任何想法。 下面的代码片段。
createSavedSearchBeanDialogue.xhtml
<p:outputPanel styleClass="save-search-panel-option" autoUpdate="true">
<p:inputText id="searchNameInput"
value="#{existingSavedSearchBean.searchNameToDisplay}"
styleClass="#{existingSavedSearchBean.inputTextStyleClass}"
widgetVar="wvsearchNameInput" size="55"
validatorMessage="#{msgs['search_results.operation.msg.error.search_name_empty']}"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.saveAsACopy}">
<f:validateRegex pattern="^(?=\s*\S).*$" />
</p:inputText>
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="saveAsACopyCheckbox"
widgetVar="wvSaveAsACopyCheckbox"
value="#{existingSavedSearchBean.saveAsACopy}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch}"
styleClass="col-settings-panel-radio"
process="@this"
update="searchNameInput saveCurrentSearchButton"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.currentSearchIsEditable}" >
<p:ajax listener="#{existingSavedSearchBean.saveAsACopyCheckboxChanged}"
update="searchNameInput saveCurrentSearchButton"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="saveAsACopyCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.save_as.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch}" />
<h:outputLabel for="saveAsACopyCheckbox" styleClass="saved-search-overwritten-info"
value="#{msgs['search_results.save_search_panel.checkbox.save_as.not_overwritable.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch and
!existingSavedSearchBean.currentSearchIsEditable}" />
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="updatedSearchCriteriaCheckbox"
widgetVar="wvUpdatedSearchCriteriaCheckbox"
value="#{existingSavedSearchBean.useUpdatedSearchCriteria}"
styleClass="col-settings-panel-radio"
update="saveCurrentSearchButton"
process="@this"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.searchCriteriaHasChanged}" >
<p:ajax update="saveCurrentSearchButton updatedColumnSettingsCheckbox"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="updatedSearchCriteriaCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.updated_criteria.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.searchCriteriaHasChanged}" />
</p:outputPanel>
<p:outputPanel styleClass="save-as-copy-panel">
<p:selectBooleanCheckbox id="updatedColumnSettingsCheckbox"
widgetVar="wvUpdatedColumnSettingsCheckbox"
value="#{existingSavedSearchBean.useUpdatedColumnSettings}"
styleClass="col-settings-panel-radio"
update="saveCurrentSearchButton"
process="@this"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.columnSettingsHaveChanged}" >
<p:ajax update="saveCurrentSearchButton updatedSearchCriteriaCheckbox"/>
</p:selectBooleanCheckbox>
<h:outputLabel for="updatedColumnSettingsCheckbox"
value="#{msgs['search_results.save_search_panel.checkbox.updated_column_settings.label']}"
rendered="#{existingSavedSearchBean.resavingExecutedSavedSearch
and existingSavedSearchBean.columnSettingsHaveChanged}" />
</p:outputPanel>
</p:panelGrid>
我想我终于 运行 找到了一个解决方案 - 我想我会 post 它以防万一有人遇到类似的问题。
在封闭的 <p:outputPanel>
上设置 autoUpdate="false"
(而不是 "true")似乎可以消除有问题的 getter 调用。
<p:outputPanel styleClass="save-search-panel-option" autoUpdate="false">
<p:inputText id="searchNameInput"
value="#{existingSavedSearchBean.searchNameToDisplay}"
styleClass="#{existingSavedSearchBean.inputTextStyleClass}"
widgetVar="wvsearchNameInput" size="55"
validatorMessage="#{msgs['search_results.operation.msg.error.search_name_empty']}"
disabled="#{existingSavedSearchBean.resavingExecutedSavedSearch
and !existingSavedSearchBean.saveAsACopy}">
<f:validateRegex pattern="^(?=\s*\S).*$" />
</p:inputText>
</p:outputPanel>