Значение параметра не передается в контроллер впервые с помощью тега commandLink - JSF 1.X - PullRequest
0 голосов
/ 18 апреля 2019

Я передаю значение классу контроллера через тег commandLink (ниже приведен код).Сначала я извлекаю несколько записей в виде табличных данных, а затем, нажимая на идентификатор, переходит на другую страницу, чтобы показать подробности.Но в этом случае значение параметра не передается в контроллер в первый раз.В контроллере я получаю нулевое значение, из-за которого он не может загрузить данные.

Я прошел по ссылке, которая говорит, что это ошибка в JSF 1.X (см. Пункт 10 ниже).ссылка на сайт).Мне нужно исправить это только с помощью тега commandLink.

Код отлично работает в другой функции, использующей тот же тег commandLink, но я не понимаю, почему он не работает в этом сценарии.Ниже приведен нерабочий и рабочий код.

Не работает:

JSP:

<hx:columnEx id = "columnRequestID">                                                        
<f:facet name = "header">                                                                       
<hx:sortHeader  styleClass = "sortHeader" id = "sortRequestID" 
defaultSortOrder = "sortbi">                                                                            
<h:outputText id = "outputTxtRequestID" styleClass = "outputText sortOverlap"
                                                                            value = "#{pc_Controller.propertiesMap.txtRequestID}"/>                                                                     </hx:sortHeader>                                                                    </f:facet>
                                                                <h:commandLink styleClass = "outputLinkEx" id = "lnKrequestID" 
                                                                    value = "#{searchResult.requestID}" actionListener = "#{pc_Controller.handleActionEvent}"
                                                                        action = "#{pc_Controller.processRCAction}"> 
                                                                            <f:param value = "#{searchResult.requestID}"                                                                                    
      name = "paramRequestID"/>
                                                                </h:commandLink>                                                                                                                                                                                        </hx:columnEx>


Controller:

if("lnKrequestID".equals(action)){
if (request.getParameter("paramSCRequestID") != null) { // This is not 
really null but but an empty value

String reqID = request.getParameter("paramSCRequestID"); // Here no value

Работает:

</f:facet>
    <h:commandLink styleClass = "outputLinkEx" id = "lnKrequestID" 
            value = "#{reportResult.requestID}" 
            action = "#{pc_Controller.processRCAction}" actionListener = "#{pc_Controller.handleActionEvent}">  

            <f:param value = "#{reportResult.requestID}" 
                name = "paramRequestID"/>

            <f:param value = "#{reportResult.requestType}" 
                name = "paramRequestType"/>

</h:commandLink>

Controller:

if("lnKrequestID".equals(action)){

if(request.getParameter("paramSetStatusRequestType")!= null ){

String requestId=request.getParameter("paramRequestID"); // Here i am 
getting value at all time
//Some code..
}}

Ссылка для предыдущего обсуждения. commandButton / commandLink / ajax action / метод слушателя не вызван или входное значение не установлено / обновлено

1 Ответ

0 голосов
/ 18 апреля 2019

Эта проблема решается путем добавления другого параметра с тем же атрибутом в JSP и работы с этим параметром в контроллере, но все же я не понимаю логику этого.Ценю, если кто-нибудь может объяснить.

<h:commandLink styleClass = "outputLinkEx" id = "lnKrequestID" 
    value = "#{searchResult.requestID}" 
    actionListener = "#{pc_Controller.handleActionEvent}"
    action = "#{pc_Controller.processRCAction}"> 
       <f:param value = "#{searchResult.requestID}"                                                                                    
                name = "paramRequestID"/>
       <f:param value = "#{searchResult.requestID}"                                                                                    
                name = "paramRequestIDSec"/>  
</h:commandLink>

Контроллер:

if("lnKrequestID".equals(action)){
if (request.getParameter("paramSCRequestIDSec") != null) { 

String reqID = request.getParameter("paramSCRequestID"); // Here it is null
String reqIDSec = request.getParameter("paramSCRequestIDSec"); // Here value is being passed
...