2014-09-10 3 views
0

У меня есть страница настроек, на которой отображаются разные настройки. Настройки можно свободно редактировать, а затем сохранять. Вот фрагмент кода с такой (один) установкой:Страница, сделанная, но после commandButton щелкнула свойство не найдено

<h:form> 
    <p:panel id="panel" header="header"> 
     <p:messages id="messages" /> 
      <p:inputMask value="#{settingsBean.getSettingByCode('SSTMOUT').value}" mask="9?99"/> 
    </p:panel> 
    <p:commandButton value="Save" update="panel" actionListener="#{settingsBean.saveAllSettings}"/> 
</h:form> 

Для приведенного выше коды, есть резервный боб SettingsBean метод getSettingByCode следующим образом:

public Setting getSettingByCode(String code) { 
    for(Setting sett : settings) { 
     if (sett.getCode().equals(code)) { 
      return sett; 
     } 
    } 
    // Lacking Settings are created during application startup by different class, so this code should never be called 
    return null; 
} 

Теперь то, что странен. Если я перейду на эту страницу, отобразятся мелкие настройки (для целей тестирования я оставил только один параметр для редактирования), я могу ввести все в поле inputMask. Кроме того, при первом доступе к странице доступны все свойства бобин без каких-либо проблем. Но когда кнопка «Сохранить» я нажимаю, исключение с этим стеком:

WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http--127.0.0.1-8080-1) /pages/secure/a.xhtml @17,161 value="#{settingsBean.getSettingByCode('SSTMOUT').value}": The class 'packageName.app.beans.SettingsBean$Proxy$_$$_WeldClientProxy' does not have the property 'getSettingByCode'.: javax.el.PropertyNotFoundException: /pages/secure/a.xhtml @17,161 value="#{settingsBean.getSettingByCode('SSTMOUT').value}": The class 'packageName.app.beans.SettingsBean$Proxy$_$$_WeldClientProxy' does not have the property 'getSettingByCode'. 
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) [jsf-impl-2.1.7-jbossorg-2.jar:] 
at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:126) [primefaces-5.0.jar:5.0] 
at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:171) [primefaces-5.0.jar:5.0] 
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIInput.validate(UIInput.java:960) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIInput.processValidators(UIInput.java:698) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at org.primefaces.component.panel.Panel.processValidators(Panel.java:287) [primefaces-5.0.jar:5.0] 
at javax.faces.component.UIForm.processValidators(UIForm.java:253) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at org.primefaces.component.layout.Layout.processValidators(Layout.java:233) [primefaces-5.0.jar:5.0] 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) [jsf-impl-2.1.7-jbossorg-2.jar:] 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:] 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:] 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25] 

После этого исключения, ничего не происходит, и ни одно из свойств не называется. Я немного озадачен тем, что делать. Я бы хотел, чтобы этот код обновил значение поля значения параметра, а затем сохранил его в моей базе данных.

Я использую JBoss 7.1.1.Final.

ответ

1

Я бы предложил следующий подход. Во-первых, в вашем боба, добавьте следующее:

private Map<String, Setting> settingsByCode = new HashMap<>(); 

@PostConstruct 
public void initializeSettingsByCode() { 
    for(Setting setting : settings) { 
     settingsByCode.put(setting.getCode(), setting); 
    } 
} 

public Map<String, Setting> getSettingsByCode() { 
    return settingsByCode; 
} 

В вашем XHTML, измените выражение EL на следующее:

<p:inputMask value="#{settingsBean.settingsByCode['SSTMOUT'].value}" mask="9?99"/> 
+0

Работа как шарм. :) Спасибо. – Mithras

Смежные вопросы