2015-06-12 9 views
0

Как обновить одно поле в csjs? код здесь:Как обновить поле в CSJS

<xp:repeat id="repeat1" rows="30" var="currentDetail" indexVar="detailIndex" value="#{LeaveBean.details}"> 
    <xp:inputText id="leavefrom" value="#{currentDetail.subfromtime}"> 
     <xp:eventHandler event="onblur" submit="false" refreshMode="partial" refreshId="repeat1"> 
       <xp:this.script><![CDATA[ 
         XSP.partialRefreshPost('#{id:view:_id1:repeat1:0:leavefrom}'); 
         var detailIndex = document.getElementById("#{id:detailIndexText}").innerHTML; 
         myRPC.checkfromdate(detailIndex).addCallback(function(returnAlert){alert(returnAlert);}); 
       ]]></xp:this.script> 
     </xp:eventHandler> 
    </xp:inputText> 
</xp:repeat> 

, что я хочу сделать, это вызов ssjs из csjs, как вы можете видеть, но странно для меня щелчок, что не работает сразу, например, когда я первый открыт страницу и щелкните поле ввода и введите «1» в нем, это должно быть всплывающее предупреждение, только когда я покинул поле, но ничего не произошло, затем я снова нажму на это поле и введите «2», после чего я покинул поле, но я только что получил предупреждение «1» на экране ... извините за мои плохие выражения ...

так что мой вопрос: я должен обновить поле, только когда я покинул поле немедленно, но почему XSP .partialRefreshPost не работает? Я пытался обновить Repeat1, не работает либо

обновление 2015/06/13: наконец, я нашел view.postScript .... так ....

ответ

2

Одна из очевидных проблем является идентификатор вона partialRefreshPost Не работай. Вы комбинируете #{id:...}, который выполняет серверную команду для расчета соответствующего идентификатора на стороне клиента. Но идентификатор, который вы передаете, является идентификатором на стороне клиента для первой строки повтора. Даже если это соответствует серверному компоненту, вы пытаетесь жестко закодировать каждую строку для сопоставления с полем в строке 1 повтора («repeat1: 0»).

Есть ли причина не использовать нормальное частичное обновление и использовать view.postScript в вашем SSJS для отправки CSJS обратно в браузер? В любом случае вы возвращаете данные о частичном обновлении. Я не уверен, что делает последняя строка вашего кода, но похоже, что он вызывает другой серверный запрос для добавления ответа. Таким образом, код, похоже, выполняет два вызова сервера, чтобы вызвать предупреждение. Я не знаю дизайн и то, что делает следующий вызов rpc, но если он может быть достигнут в одном частичном обновлении, это будет казаться лучше.

+0

спасибо, paul, сначала я использую ssjs, и проверка работает нормально, если пользователь вводит неправильную вещь, поле будет автоматически очищаться, но я просто не могу показать пользователю почему, поэтому я хочу использовать jquery чтобы показать уведомление, вопрос jquery не может работать в csjs ... правильно? или я не прав? в любом случае ... Я решил использовать csjs для вызова ths ssjs, а затем показать уведомление ... прежде чем отправлять этот вопрос, я думал, если есть какой-либо способ всплывающего оповещения для пользователя, если они вводят неправильно через ssjs ... если ответ да, я выберу его ... –

+0

, и я попытался просто «repeat1» или «leavefrom» ... все они не сработали ... –

+0

Если вы включили контроль ошибок дисплея для определенных компонентов или общий контроль ошибок отображения в области обновления, SSJS покажет пользователю, почему проверка не выполняется. В противном случае он регистрирует ошибку, но в HTML-документе не отображается компонент, который отображается в браузере, чтобы объяснить, почему. –

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