У меня есть <p:dataTable />
, в котором перечислены «Системные параметры» веб-страницы, с которой я работаю.Одним из таких параметров является пароль почтового сервера, который кодируется в Base64 в БД.В последнем столбце таблицы данных у меня есть кнопка для редактирования этих параметров, и когда я щелкаю по ней, появляется модал начальной загрузки с полями «имя» и «значение».
У меня есть ManagedBean с областью действия @ViewScoped
и функция, которая также распознает, является ли параметр для редактирования паролем почтового сервера, для декодирования значения.Метод получает объект в качестве аргумента объекта итерации с датой.Моя проблема заключается в том, что при первом открытии модального режима значение объекта является правильным, но во второй раз значение объекта изменяется, и оно генерирует исключение, поскольку значение уже декодировано, а значение имеет точку внутри и создаетошибка.
Я не понимаю, почему значение объекта данных изменяется, когда я никогда не изменяю его буквально.
Я использую PrimeFaces, BootsFaces, JSF 2.2.Это мой <p:dataTable />
:
<p:dataTable value="#{parameterBean.listParameter}" var="p"
paginator="true" rows="10"
reflow="true" id="tblParameter"
emptyMessage="No data available.">
<!-- Some columns -->
<p:column headerText="Options">
<b:commandButton value="Edit" icon="edit" look="info"
ajax="true" update="parametroForm"
onclick="ajax:parameterBean.editParameter(p)"
oncomplete="$('#parameterModal').modal('show');" />
</p:dataTable>
И это мой метод bean-компонента:
public void editParameter(TblParameter p) {
System.out.println("ENCODE: " + p.getVlrParameter());
this.param = new TblParameter(); //- This is an object in the bean to access it from modal form.
try {
setParam(p);
if (getParam().getIdParameter().equals(new Long(4))) {//- Validate if is the server mail password.
byte[] clv64 = Base64.getDecoder().decode(p.getVlrParameter().getBytes());
getParam().setVlrParameter(new String(clv64));
}
} catch(Exception e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
Наконец, как я уже говорил, когда я впервые открываю модальный режим, выводится вывод:это:
ENCODE: MTIzLjQ1Ng==
Но во второй раз это показывает:
ENCODE: 123.456
java.lang.IllegalArgumentException: Illegal base64 character 2e
at java.util.Base64$Decoder.decode0(Base64.java:714)
at java.util.Base64$Decoder.decode(Base64.java:526)
at com.abcpagos.otis.beans.admin.ParametroBean.editarParametro(ParametroBean.java:146)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)...
Если бы кто-то мог, пожалуйста, дать мне объяснение этого поведения, я был бы очень признателен.