Как установить a f:selectItem в определенной опции после действия a p:commandButton?
У меня есть код JavaScript, который очищает все p:inputText
(после p:commandButton
действие) формы. Проблема в том, что p:selectOneMenu
все еще имеет f:selectItem
выбрано в опциях это было выбрано. Мне нужно поставить значения в первом f:selectItem
каждого p:selectOneMenu
,
Как мне это сделать? Как я могу очистить выбранные значения?
Код сценария Java:
<script type="text/javascript">
function limpiarForm()
{
document.getElementById("formularioAltas").reset();
}
</script>
formularioAltas
это идентификатор формы.
Код p:commandButton
:
<p:commandButton value="Guardar" action="#{altasBean.agregarRefaccion()}" oncomplete="limpiarForm()" />
И этот код не сбрасывает (я не хочу, чтобы очистить значения, я просто хочу поставить первый выбранный вариант) значения p:selectOneMenu
Вот:
<h:outputText value="Estado de la refacción" />
<p:selectOneMenu value="#{altasBean.refaccion.estado}">
<f:selectItem itemLabel="..." itemValue="0" />
<f:selectItem itemLabel="Ok" itemValue="Ok" />
<f:selectItem itemLabel="Reparar" itemValue="Reparar" />
<f:selectItem itemLabel="Sospechoso" itemValue="Sospechoso" />
</p:selectOneMenu>
Боб:
private RefaccionBean refaccion = null;
/**
* Get the value of refaccion
*
* @return the value of refaccion
*/
public RefaccionBean getRefaccion() {
return refaccion;
}
/**
* Set the value of refaccion
*
* @param refaccion new value of refaccion
*/
public void setRefaccion(RefaccionBean refaccion) {
this.refaccion = refaccion;
}
public void agregarRefaccion() {
I did a lot of things here...
And after those things i clear the p:inputText with the javascript code
-> After that i want to set the values of the p:selectOneMenu in the fist f:selectItem
}
2 ответа
Ответ Йозефа действительно ведет вас в правильном направлении, но, поскольку вы поделились некоторым кодом, я просто буду использовать его в своем ответе.
Во-первых, убедитесь, что ваша кнопка вызывает ваш метод bean-компонента и обновляет компонент selectOneMenu после его завершения. Несмотря на то, что здесь происходит какой-то ajax, Primefaces делает это для вас.
<p:commandButton value="Guardar" action="#{altasBean.agregarRefaccion}" update="selectOneMenu" />
Атрибут update важен, так как он ищет компонент, идентификатор которого совпадает с указанным там. Так что вам нужно дать вашему selectOneMenu идентификатор. Если вам нужно обновить более одного компонента, вы можете добавить их идентификаторы в атрибут обновления, разделенные пробелом или запятой.
<h:outputText value="Estado de la refacción" />
<p:selectOneMenu value="#{altasBean.refaccion.estado}" id="selectOneMenu">
<f:selectItem itemLabel="..." itemValue="0" />
<f:selectItem itemLabel="Ok" itemValue="Ok" />
<f:selectItem itemLabel="Reparar" itemValue="Reparar" />
<f:selectItem itemLabel="Sospechoso" itemValue="Sospechoso" />
</p:selectOneMenu>
Теперь это просто вопрос очистки ваших значений в вашем методе действия:
public void agregarRefaccion() {
//If you have other values to clean, clean them here
this.refaccion.estado="0"; //Matches the value for your first item
}
Теперь я не совсем уверен, пойду ли я за тобой, но дай мне знать, поможет ли это тебе вообще. Это полностью JSF, и я добавил немного ajax. Вы можете поиграть со своим JavaScript еще.
Внешний интерфейс:
<p:inputText id="input" value="#{bean.value}" />
<p:commandButton value="button" action="#{bean.action}">
<f:ajax execute="input" render="output" />
</p:commandButton>
<p:selectOneMenu id="output" value="#{bean.placeValue}">
<f:selectItems value="#{bean.values}" />
</p:selectOneMenu>
Боб:
@ManagedBean
@RequestScoped
public class Bean {
private String value;
private List<String> values;
@EJB
private ValueService valueService;
@PostConstruct
public void init() {
values = valueService.list();
}
public void action() {
// ... Action taken
}
public String placeValue() {
// ... Validation and clear desired values
return value;
}
// ... (getters, setters, etc)
}