2013-04-15 3 views
1

myBean находится в request scope.h: inputText не работает с a4j: commandLink

<h:form id="indexFormID"> 
<a4j:outputPanel ajaxRendered="true" layout="block"> 
    <h:inputText id="inputForHD" value="#{myBean.inputParam}"></h:inputText> 
    <a4j:commandLink value="Submit" action="#{myBean.myMethod}" reRender="renderSuccess" process="indexFormID:inputForHD"></a4j:commandLink> 
</a4j:outputPanel> 


<h:panelGroup id="renderSuccess"> 
    <h:panelGroup rendered="#{myBean.someBoolean}"> 
     //Some other JSF components go here   
    </h:panelGroup> 
</h:panelGroup> 
</h:form> 

MyBean определение класса:

private String inputParam; 
//Getters and setters are there 

public String myMethod() 
{ 
    log.debug("~ Value of inputParam" +this.getInputParam()); //This is printing null value for inputParam 
    //when commandLink is clicked 
    return null; 
} 

Почему мой inputParam не получает набор с входными параметрами?

+1

Является ли вызов метода mymethod или нет? –

+0

Что вы обрабатываете в методах getter/setter? –

+0

@ HimanshuBhardwaj 'myMethod' получает вызов. В этом нет никаких проблем. В комментарии я написал, что я получаю значение 'null' для' initParam' внутри 'myMethod' –

ответ

0

Ok Я нашел несколько проблем с вашим подходом:

<h:inputText id="inputForHD" value="#{myBean.inputParam}"></h:inputText> 

Вы уже картирование атрибут inputParam с этим боба, почему новый Id «inputForHD»

Используйте сам inputParam, если вы вы хотите использовать inputForHD, вы можете выбрать то же самое из запроса.

String inputForHD = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("indexFormID:inputForHD"); 

Также, как я упоминал ранее, обернуть панель вывода внутри панели a4j, например.

 <h:panelGroup id="renderSuccess"> 
     <h:panelGroup rendered="#{helloWorld.someBoolean}"> 
      //Some other JSF components go here 
      <h:inputText id="inputForHDasdasd" value="#{helloWorld.inputParam}"></h:inputText> 
     </h:panelGroup> 
    </h:panelGroup> 

Это прекрасно работает, сообщите об этом, если возникнут проблемы.

+0

Похоже, что 'myBean.myMethod' управляет значением для' myBean.someBoolean' на основе значения 'myBean.inputParam', так что нормально, если' myBean.someBoolean' является 'false', а затем он становится' true' (обратите внимание, что OP не перезаписывает 'h: panelGroup' вместо оболочки' UIContainer' ''). –

+0

Да, это то, что я тоже думаю, поэтому я спросил, что он не разрешает «ложь» после метода, иначе он не будет отображаться. Я полагаю, что если внешний контейнер будет повторно передан внутренними компонентами, выполните перерегистрацию самостоятельно. Это должно быть так. –

+0

Проблема заключается в том, что OP не отправляет правильный идентификатор для '' в атрибут 'process'' '. См. Мой ответ для решения. –

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