2012-05-09 1 views
1

У меня есть страница, на которой я использую час: ссылка какОблицовочные ошибка при получении значения из URL (javax.el.PropertyNotWritableException :)

<h:link outcome="countryPages_View.xhtml"> 
    <img src="images/afghanistan.png" style="border: none;"/> 
    <f:param name="SaarcCountryId" value="11" /> 
    <f:param name="once" value="true" /> 
    <f:param name="fromPage" value="homePage" /> 
</h:link> 

<h:link outcome="countryPages_View.xhtml"> 
    <h:graphicImage url="images/bangladesh.png" style="margin-left:10px;border: none" /> 
    <f:param name="SaarcCountryId" value="5" /> 
    <f:param name="once" value="true" /> 
    <f:param name="fromPage" value="homePage" /> 
</h:link> 

Когда я нажимаю на изображении, а затем URL становится нормально. URL становится как этого

http://localhost:8080/WIT/faces/countryPages_View.xhtml?SaarcCountryId=1&once=true&fromPage=homePage 

Тогда на моей странице я получаю значение, как этого

<ui:composition template="./WEB-INF/templates/layout.xhtml"> 
    <ui:define name="title">SAARC Country View</ui:define> 
    <ui:define name="content"> 
     <f:metadata> 
      <f:viewParam name="SaarcCountryId" value="#{countryPages_Setup.cntryid}" /> 
      <f:viewParam name="once" value="#{countryPages_Setup.onse}" /> 
      <f:viewParam name="fromPage" value="#{countryPages_Setup.page}}" /> 
      <f:event type="preRenderView" listener="#{countryPages_Setup.beforeRenderPage}" /> 
     </f:metadata> 
     <h:form id="countryPages" prependId="false"> 
      .... 
     </h:form> 

    </ui:define> 
</ui:composition> 

Моего боб как этого

@ManagedBean 
@ViewScoped 
public class CountryPages_Setup implements Serializable { 
    private String cntryid; 
    private String page; 
    private String onse; 

    public void beforeRenderPage(ComponentSystemEvent event) { 
     System.out.println(page); 
     System.out.println(onse); 
     System.out.println(cntryid);   
    } //end of beforeRenderPage() 

    //Constructor 
    public CountryPages_Setup() { 

    } //end of constructor 

    // getter and setter 
    public String getCntryid() { 
     return cntryid; 
    } 
    public void setCntryid(String cntryid) { 
     this.cntryid = cntryid; 
    } 
    public String getOnse() { 
     return onse; 
    } 
    public void setOnse(String onse) { 
     this.onse = onse; 
    } 
    ... 
} //end of class CountryPages_Setup 

Когда мои загрузки страницы я получаю сообщение об ошибке.

exception 
javax.servlet.ServletException: javax.el.PropertyNotWritableException: /countryPages_View.xhtml @20,88 value="#{countryPages_Setup.page}}": Illegal Syntax for Set Operation 

root cause 
javax.faces.component.UpdateModelException: javax.el.PropertyNotWritableException: /countryPages_View.xhtml @20,88 value="#{countryPages_Setup.page}}": Illegal Syntax for Set Operation 

root cause 
javax.el.PropertyNotWritableException: /countryPages_View.xhtml @20,88 value="#{countryPages_Setup.page}}": Illegal Syntax for Set Operation 

Почему я получаю эту ошибку? Я сделал сеттер и геттер для своих параметров взгляда? Также когда страница загружается, сначала вызывайте мой конструктор. Я хочу использовать эти значения f: param в моем конструкторе. Я думаю, что после конструктора вызовет мой метод beforeRenderPage(). Как я могу получить эти значения в конструкторе, чтобы я мог использовать его в моем конструкторе?

Благодаря

+0

вы генерироваться геттер/сеттер для вашей переменной страницы? – Daniel

+0

Да, я не публиковал, но, конечно, я сгенерировал его 'public void setPage (String page) { this.page = page; } '. Getter также есть ... – Basit

+0

Скажите мне одну вещь. Когда моя страница загружается и мой вызов конструктора, я делаю что-то вроде этого в начале моего конструктора 'page =" "; -> if (page.equalsIgnoreCase ("CountryPages_Detail")) {..} else {...} '. может ли это быть проблемой? Я хочу сказать, что я установил значение, когда вызвал мой конструктор, а затем снова попытаюсь установить значения через f: viewparam. Просто догадаться, может быть, я ошибаюсь :) – Basit

ответ

2

Существует второй кронштейн в конце выражения: страница}}

<f:viewParam name="fromPage" value="#{countryPages_Setup.page}}" /> 
+0

: D: D Спасибо, что это сработало;). Но сначала мой вызов конструктора, а затем beforeRenderPage(). Это означает, что теперь мне нужно переместить мой код из конструктора в beforeRenderPage(). Но я заметил еще одну вещь. Мой метод beforeRenderPage() получает вызов два раза. Я думаю, из-за жизненного цикла JSF. Я вызываю функции базы данных на основе результата запроса. Это означает, что моя база данных попадает два раза. Что мне делать? Можете ли вы дать мне какое-нибудь предложение? Благодаря :) – Basit

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