You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Melloware (Jira)" <de...@myfaces.apache.org> on 2022/12/19 21:20:00 UTC
[jira] [Commented] (MYFACES-4536) PartialResponseWriter: Do no wrap the writer
[ https://issues.apache.org/jira/browse/MYFACES-4536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17649473#comment-17649473 ]
Melloware commented on MYFACES-4536:
------------------------------------
In PrimeFaces the current PartialResponseWriter wraps and delegates with a local variable.
{code:java}
public class PartialResponseWriterWrapper extends PartialResponseWriter { private PartialResponseWriter wrapped; public PartialResponseWriterWrapper(PartialResponseWriter wrapped) {
super(wrapped);
this.wrapped = wrapped;
} @Override
public void delete(String targetId) throws IOException {
wrapped.delete(targetId);
} @Override
public void endDocument() throws IOException {
wrapped.endDocument();
} @Override
public void endError() throws IOException {
wrapped.endError();
} @Override
public void endEval() throws IOException {
wrapped.endEval();
} @Override
public void endExtension() throws IOException {
wrapped.endExtension();
} @Override
public void endInsert() throws IOException {
wrapped.endInsert();
} @Override
public void endUpdate() throws IOException {
wrapped.endUpdate();
} @Override
public void redirect(String url) throws IOException {
wrapped.redirect(url);
} @Override
public void startDocument() throws IOException {
wrapped.startDocument();
} @Override
public void startError(String errorName) throws IOException {
wrapped.startError(errorName);
} @Override
public void startEval() throws IOException {
wrapped.startEval();
} @Override
public void startExtension(Map<String, String> attributes) throws IOException {
wrapped.startExtension(attributes);
} @Override
public void startInsertAfter(String targetId) throws IOException {
wrapped.startInsertAfter(targetId);
} @Override
public void startInsertBefore(String targetId) throws IOException {
wrapped.startInsertBefore(targetId);
} @Override
public void startUpdate(String targetId) throws IOException {
wrapped.startUpdate(targetId);
} @Override
public void updateAttributes(String targetId, Map<String, String> attributes) throws IOException {
wrapped.updateAttributes(targetId, attributes);
}
} {code}
However if the code is changed to use the non wrapped class and delegate to MyFaces directly the Integration Tests fail but Mojarra still passes.
{code:java}
public class PartialResponseWriterWrapper extends PartialResponseWriter {
public PartialResponseWriterWrapper(PartialResponseWriter wrapped) {
super(wrapped);
}} {code}
> PartialResponseWriter: Do no wrap the writer
> --------------------------------------------
>
> Key: MYFACES-4536
> URL: https://issues.apache.org/jira/browse/MYFACES-4536
> Project: MyFaces Core
> Issue Type: Improvement
> Components: General
> Affects Versions: 2.2.14, 2.3.10, 2.3-next-M7, 4.0.0-RC2
> Reporter: Melloware
> Priority: Major
>
> Per BalusC:
> Since JSF 2.3 the default constructor of {{FacesWrapper}} subclasses has been deprecated in order to force implementors to instead use the constructor taking the wrapped instance (and to raise their awareness), so that logically the inherited {{getWrapped()}} method will be used throughout the implementation instead of the local {{wrapped}} variable. This will ensure that the correct implementation is returned and correct behavior is performed might the {{FacesWrapper}} implementation itself being wrapped by yet another {{FacesWrapper}} implementation further down the chain. Because, when the {{FacesWrapper}} implementation incorrectly/accidentally uses the local {{wrapped}} variable instead of the {{getWrapped()}} method, then that other {{FacesWrapper}} implementation will basically be completely ignored, hereby breaking the decorator pattern.
>
> PrimeFaces ticket: https://github.com/primefaces/primefaces/issues/9518
--
This message was sent by Atlassian Jira
(v8.20.10#820010)