2014-02-14 3 views
0

Я пытаюсь безуспешно получить дескриптор ввода текста в текстовое поле, которое содержится внутри диалогового окна xe :. Диалоговое окно xe: «появляется» после нажатия кнопки XPage. Вот мой код:XPages - получить значение текстового поля внутри диалогового окна

<xe:dialog id="InputDialog5"> 

<xe:this.title>"Input Dialog</xe:this.title> 
<xp:panel> 
<xp:inputTextarea id="InputTextBox5" value="#{document1.InputTextBox5}" 
cols="60" rows="4"></xp:inputTextarea> 
</xp:panel> 
<xe:dialogButtonBar id="dialogButtonBar15"> 
<xp:button value="OK" id="button37"> 
<xp:eventHandler event="onclick" submit="true" 
refreshMode="complete" immediate="true"> 
<xp:this.action><![CDATA[#{javascript: 
var request = facesContext.getExternalContext().getRequest(); 
var header = request.getHeader("Cookie"); 
var inputVal = @Middle(header,"InputTextBox5=",";") 

setJobReferenceStatus(40,inputVal); 
var redirect = "window.location='"+applicationScope.get("redirect")+"'"; 
facesContext.getViewRoot().postScript(redirect);}]]></xp:this.action> 
<xp:this.script><![CDATA[ 
var inputvalue = document.getElementById("InputTextBox5").value; 
alert("inputvalue = " + inputvalue); 
dojo.cookie("InputTextBox5", inputvalue, { expires: 1 }); 
]]></xp:this.script> 
</xp:eventHandler> 
</xp:button> 
</xe:dialogButtonBar> 
</xe:dialog> 

Моя идея заключается в том, чтобы получить значение текстового поля, добавить его в додзе печенья, получить значение куков с помощью SSJS, а затем передать значение в функцию SSJS. Однако код завершается уже на этапе получения значения textarea. Сообщение «alert» («inputvalue =» + inputvalue); не выполняется, и диалоговое окно остается «замороженным». Любая идея о том, как я могу решить эту проблему?

ответ

2

Чтобы получить дескриптор текстового поля со стороны клиента Javascript, вы должны знать идентификатор клиента XPages. Так что это вместо того, чтобы вычислить идентификатор внутри вашего CSJS:

<xp:this.script><![CDATA[ 
    var inputvalue = document.getElementById("#{id:InputTextBox5}").value; 
    alert("inputvalue = " + inputvalue); 
    dojo.cookie("InputTextBox5", inputvalue, { expires: 1 }); 
]]></xp:this.script> 
+0

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

+0

Вы пытаетесь прочитать значение текстовой области, используя clientide JS для хранения значения в файле cookie, а затем используя SSJS для чтения значения из файла cookie? Пропустите CSJS и попробуйте использовать document1.getValue («InputTextBox5») в SSJS, чтобы прочитать значение. –

+0

Хенрик - Спасибо за предложение. Я пробовал это без успеха. Чтобы избежать путаницы, я создал новый вопрос, содержащий обновленный код. Вы можете найти его здесь http://stackoverflow.com/questions/21826814/xpages-get-value-of-a-textarea-inside-a-dialog-part-2 –

1

на беглый взгляд, я уже вижу два основных препятствия:

а) document.getElementById(..), вероятно, не будет делать (на самом деле я никогда не пробовал). Я использую XSP.getElementById(..) или dojo.byId(..) вместо

b) у вашего textarea никогда не будет одинакового идентификатора во время выполнения, которое оно имеет во время разработки. Просто используйте средство просмотра исходного кода вашего браузера, и вы увидите, что я имею в виду. Этого мы должны инструкции для расчета результирующих идентификаторов для нас, как это:

dojo.byId("#{id:InputTextBox5}") 

это, то будет переведено в конечный идентификатор объекта клиента, так что ваш код сценария на стороне клиента может найти его.

Не смотреть на остальную часть вашего кода, так что я не могу сказать, если есть больше потенциальные проблемы там

+0

Спасибо, этот синтаксис работает –

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