Когда я вставляю тег p: textEditor в диалоге p:, многие из кнопок / списков выбора на панели инструментов делают , а не работают.
Для воспроизведения проблемы выполните следующие шаги:
- Я нажимаю соответствующую кнопку, чтобы открыть (запустить) диалоговое окно.
- Я набираю текст в области текстового редактора.
- Затем я выбираю / выделяю часть текста, который я только что набрал
- Я нажимаю на выпадающий список Размер шрифта, чтобы выбрать другой
размер шрифта (например, «Большой»).
- Ничего не происходит. Текст, который я выбрал, остается прежним. Без изменений.
Как ни странно, если я выйду из диалогового окна, а затем снова открою диалоговое окно, списки выбора и кнопки на панели инструментов будут работать нормально. По-видимому, это просто первый раз, когда я открываю диалоговое окно, что кнопки панели инструментов не работают.
Также я попытался вставить тег p: textEditor в основную форму, а не в диалоговое окно, и он отлично работает в основной форме. Другими словами, когда тег p: textEditor находится вне диалогового окна p: он, кажется, работает нормально. Проблемы возникают только тогда, когда тег p: textEditor имеет значение внутри a p: диалоговое окно. Кто-нибудь еще сталкивался с этой проблемой?
Любые отзывы будут оценены. Спасибо.
JSF 2.2
Primefaces 6.2
GlassFish Server 4.1.1
NetBeans 8,2
Обновление: привет. Я смог воспроизвести проблему с помощью следующего кода. Проблема возникает, когда я использую атрибут «update» в кнопке p: commandbutton, которая запускает диалоговое окно. - Ian
=============== Вот файл JSF =========================== ==========
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:commandButton value="Login" oncomplete="PF('dlg').show();" update=":loginForm" >
<p:resetInput target=":loginForm" />
</p:commandButton>
</h:form>
<p:growl id="growl" sticky="true" showDetail="true" life="3000" />
<p:dialog header="Login" widgetVar="dlg" resizable="false">
<h:form id="loginForm">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Username:" />
<p:inputText id="username" value="#{userLoginView.username}" required="true" label="username" />
<h:outputLabel for="password" value="Password:" />
<p:password id="password" value="#{userLoginView.password}" required="true" label="password" />
<h:outputLabel for="comment" value="Comment:" />
<p:textEditor widgetVar="txtEditor1" id="comment" value="#{userLoginView.text1}" height="100" style="margin-bottom:10px;margin-right:10px;" placeholder="Enter your content">
</p:textEditor>
<f:facet name="footer">
<p:commandButton value="Login" update="growl" actionListener="#{userLoginView.login}"
oncomplete="handleLoginRequest(xhr, status, args)" />
</f:facet>
</h:panelGrid>
</h:form>
</p:dialog>
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
if(args.validationFailed || !args.loggedIn) {
PF('dlg').jq.effect("shake", {times:5}, 100);
}
else {
PF('dlg').hide();
$('#loginLink').fadeOut();
}
}
</script>
</h:body>
</html>
=============================================== ======================
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package demo;
/**
*
* @author admin
*/
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.PrimeFaces;
@ManagedBean
public class UserLoginView {
private String username;
private String password;
private String text1;
public String getText1() {
return text1;
}
public void setText1(String text1) {
this.text1 = text1;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void login(ActionEvent event) {
FacesMessage message = null;
boolean loggedIn = false;
if(username != null && username.equals("admin") && password != null && password.equals("admin")) {
loggedIn = true;
message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username);
} else {
loggedIn = false;
message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Loggin Error", "Invalid credentials");
}
FacesContext.getCurrentInstance().addMessage(null, message);
PrimeFaces.current().ajax().addCallbackParam("loggedIn", loggedIn);
}
}