2013-10-10 4 views
0

Я хочу обновить idOutput каждый раз, что я изменить значение selectOneMenu, но когда она меняется как только время на значение, отличное от null я не могу Asign null другое время, я думаю, что вызвано required="true", но я не знаю, как избежать проверки только в запросе ajax.Update управляемый компонент с Ajax игнорируя искомую

Вот код:

Bean:

@ViewScoped 
@ManagedBean 
public class ProbeNull implements Serializable 
{ 
    private static final long serialVersionUID = 1628174277372407129L; 
    private Boolean probe; 
    public ProbeNull() 
    { 
     super(); 
    } 
    public void show() 
    { 
     System.err.println("Value : " + probe); 
    } 
    public void save() 
    { 
     System.err.println("Save : " + probe); 
    } 
    public Boolean getProbe() 
    { 
     return probe; 
    } 
    public void setProbe(Boolean probe) 
    { 
     System.err.println("Setter: " + probe); 
     this.probe = probe; 
    } 
} 

XHTML:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> 
     <h:head /> 
     <h:body> 
      <h:outputText id="idOutput" value="#{probeNull.probe}" /> 
      <h:form id="form"> 
       <p:selectOneMenu id="select" required="true" value="#{probeNull.probe}"> 
        <f:selectItem itemLabel="Select one" itemValue="#{null}" /> 
        <f:selectItem itemLabel="Yes" itemValue="true" /> 
        <f:selectItem itemLabel="No" itemValue="false" /> 
        <p:ajax update=":idOutput" /> 
       </p:selectOneMenu> 
       <p:commandButton value="Save" ajax="false" action="#{probeNull.save()}" /> 
      </h:form> 
      <h:form> 
       <p:commandButton value="Show value" ajax="false" action="#{probeNull.show()}" /> 
      </h:form> 
     </h:body> 
    </html> 

Как можно избежать этого?

+0

Почему вы хотите назначить 'null'? –

+0

Это упрощенная версия моего кода, я хочу получить значение 'Boolean' для добавления другого дерева значений в дереве в зависимости от значения или не добавлять ничего, если оно равно null. – Misanjo

+0

Опция будет «null», если ничего не выбрано. Как только что-то было выбрано, почему вы хотите вернуть его в нуль и уничтожить выбор, сделанный пользователем? Если вы хотите, чтобы пользователь мог сделать «нет выбора», вы не должны указывать требуемое поле. –

ответ

0

Вы можете сделать то, что хотите, используя два тега remoteCommand и JavaScript.

<p:remoteCommand name="makeSelection" process="select" update=":idOutput" /> 
<p:remoteCommand name="clearSelection" process="@this" update="select,:idOutput" > 
    <f:setPropertyActionListener value="#{null}" target="#{probeNull.probe}" /> 
</p:remoteCommand> 

Теперь вы можете решить, какой из вызовов с использованием яваскрипта несильно

<p:selectOneMenu id="select" required="true" value="#{probeNull.probe}" onchange="selectFunction(this)"> 
... 

function selectFunction(el){ 
    //if el.value is empty you call clearSelection(); 
    //else you call makeSelection(); 
} 

Не забудьте удалить <p:ajax update=":idOutput" />

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