How to get value from h:outputText which is inside p:repeat element
I am trying to get values from the outputText component which is inside the repeat component:
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
For this, I'm using exportFunction
. Below is an example code:
import java.util.List;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.primefaces.component.api.UIColumn;
import org.primefaces.component.repeat.UIRepeat;
import org.primefaces.util.ComponentUtils;
@Named
@ApplicationScoped
public class ColumnExporter {
public String export(final UIColumn column) {
String value = StringUtils.EMPTY;
for (final UIComponent child : column.getChildren())
value += buildValue(child);
return value;
}
private String buildValue(final UIComponent uiComponent) {
if (uiComponent.isRendered()) {
if (uiComponent instanceof ValueHolder) {
return ComponentUtils.getValueToRender(FacesContext.getCurrentInstance(), uiComponent);
} else if (uiComponent instanceof UIRepeat) {
UIRepeat repeat = (UIRepeat) uiComponent;
return buildRepeatValue(repeat);
} else if (uiComponent.getChildCount() > 0) {
String value = "";
for (UIComponent child : uiComponent.getChildren()) {
value += buildValue(child);
}
return value;
}
}
return "";
}
private String buildRepeatValue(UIRepeat repeat) {
String value = "";
String variableName = repeat.getVar();
String statusName = repeat.getVarStatus();
List<?> values = (List) repeat.getValueExpression("value")
.getValue(FacesContext.getCurrentInstance().getELContext());
for (Object valueObj : values) {
for (UIComponent child : repeat.getChildren()) {
String childValue = buildValue(child);
if (StringUtils.isNotEmpty(childValue)) {
value += childValue + "n";
}
}
}
return value;
}
}
But I always get the NULL value despite the fact that this value is correctly displayed in the table.
Does anyone know how to properly retrieve this value from the outputText element?
jsf primefaces
add a comment |
I am trying to get values from the outputText component which is inside the repeat component:
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
For this, I'm using exportFunction
. Below is an example code:
import java.util.List;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.primefaces.component.api.UIColumn;
import org.primefaces.component.repeat.UIRepeat;
import org.primefaces.util.ComponentUtils;
@Named
@ApplicationScoped
public class ColumnExporter {
public String export(final UIColumn column) {
String value = StringUtils.EMPTY;
for (final UIComponent child : column.getChildren())
value += buildValue(child);
return value;
}
private String buildValue(final UIComponent uiComponent) {
if (uiComponent.isRendered()) {
if (uiComponent instanceof ValueHolder) {
return ComponentUtils.getValueToRender(FacesContext.getCurrentInstance(), uiComponent);
} else if (uiComponent instanceof UIRepeat) {
UIRepeat repeat = (UIRepeat) uiComponent;
return buildRepeatValue(repeat);
} else if (uiComponent.getChildCount() > 0) {
String value = "";
for (UIComponent child : uiComponent.getChildren()) {
value += buildValue(child);
}
return value;
}
}
return "";
}
private String buildRepeatValue(UIRepeat repeat) {
String value = "";
String variableName = repeat.getVar();
String statusName = repeat.getVarStatus();
List<?> values = (List) repeat.getValueExpression("value")
.getValue(FacesContext.getCurrentInstance().getELContext());
for (Object valueObj : values) {
for (UIComponent child : repeat.getChildren()) {
String childValue = buildValue(child);
if (StringUtils.isNotEmpty(childValue)) {
value += childValue + "n";
}
}
}
return value;
}
}
But I always get the NULL value despite the fact that this value is correctly displayed in the table.
Does anyone know how to properly retrieve this value from the outputText element?
jsf primefaces
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12
add a comment |
I am trying to get values from the outputText component which is inside the repeat component:
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
For this, I'm using exportFunction
. Below is an example code:
import java.util.List;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.primefaces.component.api.UIColumn;
import org.primefaces.component.repeat.UIRepeat;
import org.primefaces.util.ComponentUtils;
@Named
@ApplicationScoped
public class ColumnExporter {
public String export(final UIColumn column) {
String value = StringUtils.EMPTY;
for (final UIComponent child : column.getChildren())
value += buildValue(child);
return value;
}
private String buildValue(final UIComponent uiComponent) {
if (uiComponent.isRendered()) {
if (uiComponent instanceof ValueHolder) {
return ComponentUtils.getValueToRender(FacesContext.getCurrentInstance(), uiComponent);
} else if (uiComponent instanceof UIRepeat) {
UIRepeat repeat = (UIRepeat) uiComponent;
return buildRepeatValue(repeat);
} else if (uiComponent.getChildCount() > 0) {
String value = "";
for (UIComponent child : uiComponent.getChildren()) {
value += buildValue(child);
}
return value;
}
}
return "";
}
private String buildRepeatValue(UIRepeat repeat) {
String value = "";
String variableName = repeat.getVar();
String statusName = repeat.getVarStatus();
List<?> values = (List) repeat.getValueExpression("value")
.getValue(FacesContext.getCurrentInstance().getELContext());
for (Object valueObj : values) {
for (UIComponent child : repeat.getChildren()) {
String childValue = buildValue(child);
if (StringUtils.isNotEmpty(childValue)) {
value += childValue + "n";
}
}
}
return value;
}
}
But I always get the NULL value despite the fact that this value is correctly displayed in the table.
Does anyone know how to properly retrieve this value from the outputText element?
jsf primefaces
I am trying to get values from the outputText component which is inside the repeat component:
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
For this, I'm using exportFunction
. Below is an example code:
import java.util.List;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.primefaces.component.api.UIColumn;
import org.primefaces.component.repeat.UIRepeat;
import org.primefaces.util.ComponentUtils;
@Named
@ApplicationScoped
public class ColumnExporter {
public String export(final UIColumn column) {
String value = StringUtils.EMPTY;
for (final UIComponent child : column.getChildren())
value += buildValue(child);
return value;
}
private String buildValue(final UIComponent uiComponent) {
if (uiComponent.isRendered()) {
if (uiComponent instanceof ValueHolder) {
return ComponentUtils.getValueToRender(FacesContext.getCurrentInstance(), uiComponent);
} else if (uiComponent instanceof UIRepeat) {
UIRepeat repeat = (UIRepeat) uiComponent;
return buildRepeatValue(repeat);
} else if (uiComponent.getChildCount() > 0) {
String value = "";
for (UIComponent child : uiComponent.getChildren()) {
value += buildValue(child);
}
return value;
}
}
return "";
}
private String buildRepeatValue(UIRepeat repeat) {
String value = "";
String variableName = repeat.getVar();
String statusName = repeat.getVarStatus();
List<?> values = (List) repeat.getValueExpression("value")
.getValue(FacesContext.getCurrentInstance().getELContext());
for (Object valueObj : values) {
for (UIComponent child : repeat.getChildren()) {
String childValue = buildValue(child);
if (StringUtils.isNotEmpty(childValue)) {
value += childValue + "n";
}
}
}
return value;
}
}
But I always get the NULL value despite the fact that this value is correctly displayed in the table.
Does anyone know how to properly retrieve this value from the outputText element?
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
<p:dataTable>
...
<p:column sortBy="#{row.trainnumber}" style="text-align: right; text-overflow: ellipsis; width: 80px" exportFunction="#{columnExporter.export}">
<f:facet name="header">
<h:outputText value="Zugnr." title="Zugnummer" />
</f:facet>
<p:repeat var="item" value="#{row.values}" varStatus="aendStatus">
<h:outputText value="#{item.trainnumber}" />
<h:outputText value="<br />" escape="false" rendered="#{!someValue.last}" />
</p:repeat>
</p:column>
</p:dataTable>
jsf primefaces
jsf primefaces
edited Nov 21 '18 at 18:41
Kukeltje
8,78441338
8,78441338
asked Nov 21 '18 at 13:59
user3654104user3654104
11
11
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12
add a comment |
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413740%2fhow-to-get-value-from-houtputtext-which-is-inside-prepeat-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413740%2fhow-to-get-value-from-houtputtext-which-is-inside-prepeat-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Tried not* using a p:datatable and a ui:repeat? Does it work then?
– Kukeltje
Nov 21 '18 at 18:42
Works without ui:repeat - I can get value from outputText
– user3654104
Nov 22 '18 at 7:58
With ui:repeat (instead of p:repeat)
– Kukeltje
Nov 22 '18 at 9:19
It does not change anything. I understand that the problem is that in ui:repeat component there really only exists one outputText element for many values. How do you get these values if you do not find in this item?
– user3654104
Nov 22 '18 at 21:12