2014-01-23 4 views
0

Итак, у меня есть 2 формы и кнопка с f: ajax, прикрепленная к ней. Я хочу выполнить вторую форму при нажатии кнопки, но кажется, что она игнорирует, когда я передаю идентификатор формы в атрибуте execute. Но когда я заменяю его «execute =»: form1 », он работает правильно (информация из формы отправляется на сервер). Может ли кто-нибудь сказать мне, почему не будет работать с идентификатором второй формы или как я могу это сделать: одной кнопкой выполнить любую форму, которую я хочу со страницы (так как теперь на сервер не отправляется информация, только слушатель называется).<f:ajax> Выполнение различных форм

код ниже:

<h:form id="form1"> 
    <h:panelGrid id="inputSection" > 
     <h:inputText id="input1" value="#{counterMB.number1}" /> 
    <h:inputText id="input2" value="#{counterMB.number2}" /> 
    </h:panelGrid> 
    <h:outputLabel id="sumResponse2" value="#{counterMB.sum}" /> 
</h:form> 

<h:form id="form2"> 
    <h:panelGrid id="inputSection" > 
     <h:inputText id="input1" value="#{counterMB.number1}" /> 
    <h:inputText id="input2" value="#{counterMB.number2}" /> 
    </h:panelGrid> 
    <h:outputLabel id="sumResponse2" value="#{counterMB.sum}" /> 
</h:form> 

<h:commandButton value="Sum numbers"> 
    <f:ajax event="click" execute=":form2" listener="#{counterMB.sum}" render=":form2 :form1"/> 
</h:commandButton> 

Update: так, чтобы быть более четко: от того, что я прочитал, я могу использовать Ajax для обновления/обновления и т.д. некоторые части страницы вместо обновления всей страницы. То, что я пытался сделать, это группировать некоторые компоненты в разных формах и выполнять форму за раз, чтобы посмотреть, как она себя ведет. Он отлично работает, если я использую идентификатор первой группы (формы), но не работает вообще, если я использую идентификатор второй формы (он вызывает действие, но не передает никаких данных из какой-либо формы). Я не понимаю, почему. (PS для тех, кто утверждает, что мне не хватает знаний: это причина задавать вопросы, не так ли? Я пытаюсь изучить некоторые новые вещи)

+1

ТВА, интересно, что ваш CommandButton работает на всех - быть не в какой-либо формы. И я не уверен, что вы можете выполнить/отправить две формы одновременно ... –

+0

Вы не поняли: я не хочу отправлять 2 формы в одно и то же время или n форм, но я хочу отправить определенную форму из набора n форм вместо первого. Как я сказал выше, он отлично подходит для первой формы. Я искал это в Интернете и других учебниках/форумах, и я нашел других, жалующихся на то, что это не работает (хотя, соответственно, спецификации jsf он должен) –

+0

Итак, пожалуйста, обновите свой вопрос, чтобы ваша цель была понятной и понятной людьми, которые могли бы быть в состоянии помочь вам достичь ваших целей - и других людей, которые могут захотеть добиться чего-то подобного позже. –

ответ

1

Кажется, что вам не хватает базовых знаний о том, как работает jsf. Командная кнопка должна находиться внутри формы. И невозможно отправить 2 формы одной кнопкой. Атрибут execute f: ajax указывает, какие компоненты обрабатывать, например, если у вас есть 2 входных текста, вы можете обрабатывать только один и игнорировать другой, используя этот атрибут. но делать то, что вы пытаетесь сделать, невозможно.

Не имеет смысла представлять 2 формы и выполнять один метод действий один раз .. нет смысла иметь 2 формы. почему бы вам не положить все в одну форму?

+1

Более того, OP не имеет базовых знаний о том, как работает HTML. – BalusC

0

В вашем текущем решении вы используете h:commandButton за пределами любых h:form - это немного против HTML и JSF, поэтому не рассчитывайте на это. То, что я хотел бы предложить

  • если вы используете RichFaces, поставить a4f:jsFunction в любой форме и вызвать в результате Javascript из любой точки
  • если вы используете Primefaces, поставить p:remoteCommand в любой форме и вызвать полученный javascript из любого места
  • Если вы не используете ни одного из них, поставьте <h:commandButton /> в любой форме, установите стиль скрытым и используйте javascript для отправки формы.

Надеется, что это помогает ...